如this SO reply中所述的OAuth2的正常流程如下:
-
使用访问令牌发送API请求
-
如果访问令牌无效,请尝试使用刷新令牌更新它
-
如果刷新请求通过,则更新访问令牌并重新发送初始API请求
-
如果刷新请求失败,请要求用户重新进行身份验证
这对于大多数API调用来说都很好,但我想知道一件事:身份验证 .
当用户尝试使用他们喜欢的服务登录我喜欢的新webapp时,我是否应该使用他们的刷新令牌(或OAuth1中的缓存访问令牌)来尝试登录,或者我应该总是去获取新的令牌来自服务提供商(谷歌,Facebook等)并丢弃存储的访问和刷新令牌?
1 回答
用户身份验证和OAuth 2.0是两回事 . 差异在下面详细解释:http://oauth.net/articles/authentication/ . 即使在OAuth 2.0之上构建用户身份验证/ SSO协议 - 这是OpenID Connect的功能和某些供应商特定的实现 -
refresh_token
仍然始终适用于access_token
而不是用户身份验证事件或身份令牌 .您不能单独使用刷新令牌来刷新用户的登录会话,因为需要通过浏览器与用户进行某些交互(可能是活动的,可能是被动的)来确认用户是否(仍然)存在 .
要刷新用户的登录会话,您将始终必须重定向到身份提供程序并获取新的身份验证信息 . 请注意,该交互可能还会为您提供一个新的刷新令牌,可用于刷新访问令牌 .