php - 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,我们仔细检查了所有内容)。是什么导致了这种突然的不匹配?任何帮助将不胜感激。谢谢
解决方案
这是因为“yii-authclient”库的 defautlReturnUrl() 方法。“范围”没有从 redirect_uri 中取消设置,因此 Google 抛出了 HTTP 400 错误请求错误。这可以通过以下方法来避免:
- 在我们指定 client_id、client_secret 等的组件配置中显式设置 returnUrl。
- 在 defaultReturnUrl() 中,取消设置 ['scope'] 以及 'code' 和 'state'。
推荐阅读
- excel - For Each Loop 使用 Columns() 返回完整范围
- less - 是否可以用一个类包装 LESS 导入并呈现其基本样式定义?
- php - Pagerfanta 模板导致诗篇错误
- python - 用按钮调用覆盖 tkinter 笔记本需要多少钱?
- c# - Blazor:使用 EditForm-Component 加载页面时 _Host.cshtml 中出现 NullReferenceException
- html - Javascript 中的滑块
- c# - 使用 C# 从 firebase 获取所有集合
- firebase-cloud-messaging - Ejabberd mod_push
- ios - Xcode 13 和 Flutter 2.5.1 - 致命错误:找不到“Flutter/Flutter.h”文件#import
- sql-server - 如何从 SQL Server 中的电子邮件 ID 中仅获取域名