OAuth 2.0如何刷新令牌?

时间:2017-04-30 19:59:37

标签: oauth-2.0

我在MEAN堆栈Web应用程序中使用Passport进行身份验证过程的读取操作。我一直关注this教程,但在刷新令牌时我感到很困惑。

我确实理解这些令牌用于在用户过期时获取新的访问令牌,如here和任何其他关于该令牌的OAuth教程所述,但我不知道了解服务器如何知道如果用户没有提供任何凭证(必须在第一次登录时提供凭据),必须使用哪个刷新令牌。

任何人都可以帮助我完全理解这是如何工作的吗?

非常感谢:)

2 个答案:

答案 0 :(得分:0)

授权服务器在用户进行身份验证后发出第一个刷新令牌。然后,它将刷新令牌和用户之间的关联存储为服务器端状态的一部分,以便它知道发出了哪个刷新令牌,它是否仍然有效以及哪个用户。

当客户端稍后使用刷新令牌返回授权服务器时,服务器可以从服务器端存储中查找上下文和关联用户。

答案 1 :(得分:0)

好吧,最后我发现我所遵循的教程是错误的(至少在刷新令牌方面是这样)。

在教程中,它说Passport使用刷新令牌向Auth服务器发送请求以获取新的访问令牌。嗯,那不是真的。根据Passport的作者Jared Hanson的说法,Passport不会处理刷新令牌,如果需要,应用程序的后端必须处理这些令牌。当您获得访问权限并刷新令牌时,Passport只是向Auth Server发出第一个请求。然后,您可以使用刷新令牌来请求新的访问令牌,例如使用后台任务来检查任何访问令牌是否会很快过期。

我认为编写该教程的人很困惑,因为第二次使用任何可用的策略登录(例如Facebook),该服务不会要求凭据,但这不是因为刷新令牌,这是只是因为浏览器正在保存FB会话。如果您转到FB并注销,下次尝试使用FB登录应用程序时,它将再次询问凭据。事实上,如果我没有错,那么一旦用户退出,就应该删除访问和刷新令牌。令人惊讶的是,您可以在IBM开发人员博客中发现这种错误。

BTW,Jared Hanson关于Passport如何工作(不使用刷新令牌)的评论可以找到here。既然这是一个老问题,我在Twitter上自己问过他,答案也是一样的:)