1

我试图从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]详细下载的OpenID从配置https://accounts.google.com/.well-known/openid-configuration

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

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]信息登录已完成'[email protected]'。提供者:'google'。

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故宫

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

回答

0

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

试试这个,看看是否恢复谷歌刷新令牌。

这种行为可以在这里找到(的HTTP/REST标签下)

谷歌文档:https://developers.google.com/identity/protocols/OAuth2WebServer#offline

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

在正常使用情况下,刷新标记不应丢失。如果你看到一个它迷失的情况,请告诉我。

+0

感谢您的回复,我可以通过添加prompt = consent参数再次收到刷新令牌。 –

+0

感谢您的回复,我可以通过添加提示=同意参数来再次收到刷新令牌。 但是不建议添加此参数? 在实际使用中,首先要求用户用对话框登录,然后多次使用刷新令牌。如果到期,则再次显示登录对话框。 在第一个添加该参数似乎没有问题。 –

+0

我建议你像正常一样进行正常的登录和刷新流程。如果刷新失败并且代码检测到没有刷新标记,则可能可以调用prompt = consent来重新创建刷新标记。 –