【发布时间】:2019-01-28 14:07:14
【问题描述】:
我们在使用 PHP yii2 框架的应用程序中使用 google 作为 OAuth2 客户端。在准备授权请求时,redirect_uri 在 buildAuthUrl() 方法 (OAuth2.php) 中正确配置,并且用户按预期获得授权。现在,当我们尝试将 code 交换为来自 Google Server 的 accessToken 时,redirect_uri 会以某种方式附加到这样的范围 => http://cms.local.com/user/auth/login?authclient=google&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile。 当我们将此请求发送给 google 时,我们会收到带有消息 redirect_uri_mismatch 的 HTTP 400 错误。 奇怪的是,直到昨天它一直工作得很好,然后突然我们开始从谷歌收到上述错误(我们没有在谷歌开发控制台的项目中更改 URI,我们仔细检查了所有内容)。 是什么导致了这种突然的不匹配?任何帮助将不胜感激。 谢谢
【问题讨论】:
-
据我所知,谷歌 OAuth 在本地系统上不起作用,但在实时域上。而且你没有在你的谷歌控制台和你的
Authorised origins中提供redirect_uri -
@MuhammadOmerAslam 你也可以让它在你的本地主机上工作,这不是问题。我们在我们的谷歌开发控制台中需要 redirect_uri。问题在于
fetchAccessToken()方法,库配置的uri不正确导致错误。 -
可能是您将有效域用作本地域。据 google 所知,
local.com不是本地的,cms.local.com没有在 DNS 服务器中解析。 -
@Jørgen 正如我所提到的,问题不在本地域中,它对我来说很好。问题是附加到我的 redirect_uri 的 scope 导致 Google Server 引发的不匹配。据我调试,我发现 yii2-authclient 库中似乎有些问题。
标签: php oauth-2.0 yii2 google-oauth