【问题标题】:PHP Yii2 : Erratic behaviour of Google OAuth2 client libraryPHP Yii2:Google OAuth2 客户端库的不稳定行为
【发布时间】: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


【解决方案1】:

这是因为“yii-authclient”库的 defautlReturnUrl() 方法。 “范围”没有从 redirect_uri 取消设置,因此 Google 抛出了 HTTP 400 错误请求错误。 这可以通过以下方法避免:

  1. 在我们指定 client_id、client_secret 等的组件配置中显式设置 returnUrl。
  2. 在 defaultReturnUrl() 中,取消设置 ['scope'] 以及 'code' 和 'state'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多