【问题标题】:Requesting refresh token fails.No refresh tokens were found in the token store请求刷新令牌失败。在令牌存储中找不到刷新令牌
【发布时间】:2016-11-04 00:33:57
【问题描述】:

我正在尝试从应用服务获取 Google 的刷新令牌,但我不能。

日志说

2016-11-04T00:04:25 PID[500] 详细接收请求:GET https://noteappsvr.azurewebsites.net/.auth/login/google?access_type=offline 2016-11-04T00:04:25 PID[500] 详细从 https://accounts.google.com/.well-known/openid-configuration 下载 OpenID 配置

2016-11-04T00:04:25 PID[500] 详细从 https://www.googleapis.com/oauth2/v3/certs 下载 OpenID 颁发者密钥

2016-11-04T00:04:25 PID[500] 信息重定向:https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=299597639...04000925%26redir%3D&access_type=offline

2016-11-04T00:05:17 PID[500] 详细接收请求:GET https://noteappsvr.azurewebsites.net/.auth/login/google/callback?state=nonce%3D5656e1dd...&prompt=none

2016-11-04T00:05:17 PID[500] 详细调用外部 HTTP 端点 POST https://www.googleapis.com/oauth2/v4/token

2016-11-04T00:05:18 PID[500] 已完成“xxxxx@gmail.com”的信息登录。提供者:“谷歌”。

2016-11-04T00:05:18 PID[500] 为站点“noteappsvr.azurewebsites.net”详细编写“AppServiceAuthSession”cookie。长度:728。

2016-11-04T00:05:18 PID[500] 信息重定向:https://noteappsvr.azurewebsites.net/.auth/login/done#token=%7B%22authenti...d6ffa9924e5%22%7D%7D

2016-11-04T00:05:50 PID[500] 详细接收请求:GET https://noteappsvr.azurewebsites.net/.auth/refresh

2016-11-04T00:05:50 PID[500] 详细 JWT 验证成功。主题:'sid:4fd4f6...',颁发者:'https://noteappsvr.azurewebsites.net/'。

2016-11-04T00:05:50 PID[500] 警告 sid:4fd4f6... 发出的刷新请求失败,因为在令牌存储中找不到刷新令牌。

2016-11-04T00:05:50 PID[500] 信息发送响应:403.80 Forbidden

令牌存储中似乎没有刷新令牌,但为什么呢? 我已经在门户上打开了令牌存储设置。

【问题讨论】:

    标签: azure authentication azure-web-app-service


    【解决方案1】:

    如果 Google 检测到它已经向您的用户提供了刷新令牌,那么除非您明确提示用户同意,否则它不会提供额外的刷新令牌。您可以通过将 prompt=consent 查询字符串参数添加到登录 URL 来执行此操作。在你的情况下,https://noteappsvr.azurewebsites.net/.auth/login/google?access_type=offline&prompt=consent

    试试这个,看看是否能恢复 Google 刷新令牌。

    可以在此处(在 HTTP/REST 标签下)找到有关此行为的 Google 文档:https://developers.google.com/identity/protocols/OAuth2WebServer#offline

    重要提示:当您的应用程序收到刷新令牌时,请务必存储该刷新令牌以供将来使用。如果您的应用程序丢失了刷新令牌,则它必须在获取另一个刷新令牌之前重新提示用户同意。如需重新提示用户同意,请在授权码请求中包含提示参数,并将值设置为同意。

    在正常使用中,刷新令牌不应丢失。如果您遇到丢失的情况,请告诉我。

    【讨论】:

    • 感谢您的回复,我可以通过添加prompt=consent参数再次接收刷新令牌。
    • 感谢您的回复,我可以通过添加 prompt=consent 参数再次接收刷新令牌。但是总是不推荐添加这个参数?在实际使用中,先用对话框催用户登录,然后多次使用刷新令牌。如果过期,再次显示登录对话框。一开始加那个参数好像没问题吧?
    • 我建议您像以前一样进行正常的登录和刷新流程。如果刷新失败并且您的代码检测到没有刷新令牌,那么也许您可以调用 prompt=consent 来重新创建刷新令牌。
    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 2012-02-16
    • 2021-07-16
    • 2021-09-13
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2018-01-31
    相关资源
    最近更新 更多