通常,Google OAuth2.0 机制运行良好。
- 用户确认访问具有选定范围的 Google 帐户的权限。
- 检索刷新令牌并将其保存到长时间存储中。
- 每次需要(如果访问令牌过期)访问令牌都会被检索并用于访问 API。
但有时(到目前为止只有两次超过 6 个月)我经历了奇怪的行为:
对 Google API 的请求会返回 Invalid Credentials (401) 错误。刷新访问令牌(使用存储的刷新令牌)没有帮助。
这是我在测试此问题时得到的一些结构化输出:
+ -------------------------------------------------- ------------------------------------ + | 1.尝试刷新令牌。| | 2.完成刷新令牌。| + -------------------------------------------------- ------------------------------------ + | 使用权: ************************************************ **** | | 刷新:********************************************* | | 过期:3600 | | 创建时间:2013-07-23 13:12:36 | + -------------------------------------------------- ------------------------------------ +
我还尝试通过向 https://www.googleapis.com/oauth2/v1/tokeninfo发送请求来验证“新鲜”访问令牌
+ -------------------------------------------------- ------------------------------------ + | 1. 尝试检查令牌。| | 2.完成检查令牌令牌。| + -------------------------------------------------- ------------------------------------ + | 发给:************.apps.googleusercontent.com | | 观众:************.apps.googleusercontent.com | | 用户 ID:************ | | expires_in: 3600 | | 电子邮件:**********@gmail.com | | 验证电子邮件:1 | | access_type: 离线 | | 范围:: | + -------------------------------------------------- ------------------------------------ + | https://www.googleapis.com/auth/userinfo.email | | https://www.googleapis.com/auth/userinfo.profile | | https://www.googleapis.com/auth/plus.me | | https://www.googleapis.com/auth/drive | + -------------------------------------------------- ------------------------------------ +
但是当我尝试访问驱动器提要时,响应是:
调用 GET https://www.googleapis.com/drive/v2/files 时出错 (401) 凭据无效 领域:全球 原因:authError 消息:无效的凭据 位置类型:标题 地点:授权
我们在日历上也遇到了同样的问题。所以:
- 令牌之前有效(一切正常)。
- 刷新令牌仍然有效。
- 请求提要以“无效凭据”错误响应。
- 所有其他令牌仍然运行良好,这意味着代码是有效的。
通常,当令牌被撤销时,尝试刷新令牌时会返回“invalid_grant”错误。
问题
- 这种行为的原因是什么?如果刷新令牌被撤销或以其他方式无效,新访问令牌的请求是否会产生错误?
- 有没有办法验证刷新令牌?