首页 > 解决方案 > PHP Yii2:Google OAuth2 客户端库的不稳定行为

问题描述

我们在使用 PHP yii2 框架的应用程序中使用 google 作为 OAuth2 客户端。在准备授权请求时,redirect_uri 在 buildAuthUrl() 方法 (OAuth2.php) 中正确配置,并且用户按预期获得授权。现在,当我们尝试从 Google 服务器交换 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,我们仔细检查了所有内容)。是什么导致了这种突然的不匹配?任何帮助将不胜感激。谢谢

标签: phpoauth-2.0yii2google-oauth

解决方案


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

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

推荐阅读