请求刷新令牌失败。在令牌存储中找不到刷新令牌

时间:2016-11-04 00:33:57

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

我试图从App Services获取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'。提供商:' google'。

     

2016-11-04T00:05:18 PID [500]详细写作' AppServiceAuthSession'网站的cookie' noteappsvr.azurewebsites.net'。长度: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禁止

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

1 个答案:

答案 0 :(得分:0)

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

尝试此操作,看看是否可以恢复Google刷新令牌。

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

  

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

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