使用google/googleapi包请求OAuth2.0授权出现invalid_grant 400错误如何解决
Google Calendar OAuth 2.0
invalid_grant 报错解决方案 出现该400 Bad Request: invalid_grant报错可按以下优先级排查:
- 授权码一次性校验失败
回调地址携带的$_GET['code']是一次性凭证,仅可用于兑换一次access token,重复刷新回调页面、重复提交同一个code都会触发该报错。出现该问题后重新走一次完整的授权流程即可。 - 重定向URI不匹配
代码中通过action('gCalendarController@oauth')生成的回调地址,必须和Google Cloud控制台「OAuth 2.0客户端ID」配置的已授权重定向URI完全一致,包括http/https协议头、域名、端口、路径,任意字符不一致都会触发报错。可先打印$rurl变量的值,和控制台配置做逐项比对。 - 凭证文件配置错误
你当前将credentials.json存放在vendor目录下的行为存在风险,composer执行安装/更新操作时可能会覆盖/删除该文件。同时需确认该凭证是从Google Cloud控制台下载的「OAuth客户端凭证」,而非服务账号凭证,凭证类型下载错误也会触发该报错。建议将凭证文件迁移至项目storage或config目录下,同时确认项目对该文件有可读权限。 - 代码逻辑错误
$client->authenticate($_GET['code'])返回值为包含access_token、refresh_token、expires_in等字段的数组,并非单一的refresh_token。后续使用时需要先调用$client->setAccessToken(你存储的token数组)完成初始化,如果token过期未调用refresh_token兑换新的access_token,也会触发该报错。 - 服务器时间偏差
如果你的服务器时间和标准UTC时间偏差过大,会导致签名校验不通过,同步服务器时间为NTP标准时间即可修复。
注意:生产环境请勿关闭
CURLOPT_SSL_VERIFYPEER配置,会存在严重的中间人攻击风险,本地开发可临时开启,上线必须恢复校验。
内容的提问来源于stack exchange,提问作者Anil Parshi
相关产品推荐
相关产品推荐

