通常,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”错误。
问题
- 这种行为的原因是什么?如果刷新令牌被撤销或以其他方式无效,新访问令牌的请求是否会产生错误?
- 有没有办法验证刷新令牌?
