【发布时间】:2021-08-10 08:49:29
【问题描述】:
使用 Java OAuth2 客户端库:scribe 1.2.0 (https://github.com/scribejava/scribejava)
我能够从授权代码中获取刷新令牌(即,通过使用 client_id、client_secret、code、scope、grant_type (authorization_code)、redirect_uri 参数对 https://accounts.google.com/o/oauth2/token 进行 POST 调用)。而且我已经在数据库中保留了刷新令牌。 而且我们支持驱动器和日历范围 => 所以,我确实为每个用户存储了 两个刷新令牌(电子邮件)
然后客户端将调用 API 以获取访问令牌(然后我使用 refresh_token、grant_type (refresh_token)、client_id 和 client_secret 对 https://accounts.google.com/o/oauth2/token 进行 POST 调用)。并且通话成功。 IE;快乐的正常路径有效。
但最终从刷新令牌获取新访问令牌失败并出现 invalid_grant 错误代码(带有 Bad Request 或 令牌已过期或撤销作为错误)(如 2 天或 3 天等)
请注意,刷新令牌不会被用户或代码显式撤销或无效。密码未更改。代码没有改变。客户 ID 和机密没有改变。我有点迷路了。
问题
-
既然刷新令牌应该是一个持久令牌,为什么我的应用程序无法从刷新令牌中获取新的访问令牌?它只是在 2 到 3 天内失败 - 而且它在舞台和生产环境中经常发生。
-
是否基于范围(驱动器和日历)存储两个刷新令牌 - 每个用户(电子邮件)问题(即;一旦发出第二个刷新令牌,前一个刷新令牌就会过期)? [不应该如此 - 我知道每个用户和客户端以及所有客户端的每个用户都有限制。但是,2 太低,无法达到该限制。]
回答 终于能够解决它,请参阅下面的评论答案 - 它与为不同范围拥有两个相同电子邮件的刷新令牌有关,并使其中一个无效。
从刷新令牌获取访问令牌 - PostMan
从授权码获取刷新令牌 - PostMan
相关问题:Google token refresh returns "Token has been expired or revoked." Since couple of days Refresh token has been automatically expired
【问题讨论】:
-
我希望 link 对你有用。
-
我想你需要将这些值作为请求参数。
-
@VivekJain - 这是来自邮递员的快照,并且传递参数作为 POST 请求的有效负载正在工作。我能够为我的开发环境获取访问令牌。
标签: java http oauth google-oauth scribe