OAuth2 中的访问令牌?

Access Tokens in OAuth2?

这个问题可能基于一些假设或误解,但在大多数 OAuth 版本 1 服务器中,用户可以生成访问令牌和访问令牌机密以及访问级别设置。

在 OAuth2 中,这已被刷新令牌取代,这个概念扰乱了我与另一个服务提供商的集成。

基本上,我们想要做的是拥有这个永久访问令牌,这样用户就不必登录两次(第二次允许访问)。

拥有永久访问令牌与 OAuth 2.0 中访问令牌的用途相冲突,尽管您可能会发现某些 providers/implementations 允许这样做。

您应该做的是在旧访问令牌过期时使用刷新令牌获取新访问令牌。这并不意味着用户必须重新登录。 refresh token之所以存在,正是为了防止后者。

您可以拥有永久刷新令牌。

在 oAuth2 中,访问令牌被设计为寿命较短,而刷新一个则具有更长的寿命。在所有情况下,用户都必须在授权代码阶段登录才能授予访问权限。

http://www.bubblecode.net/en/2013/03/10/understanding-oauth2/

OAuth2流程如下:

当用户登录应用程序时,他们将收到一个访问令牌和一个将存储在客户端的刷新令牌。在服务器端,刷新令牌必须存储在数据库中,并且有效期很长(例如:1 个月)。用户可以使用用户在第一次令牌请求中收到的刷新令牌 (grant_type=refresh_token) 获取新的访问令牌(当它过期时,例如每 30 分钟一次)。

当访问令牌过期时,客户端必须发送刷新令牌。

例如:

refresh_token=74dc51c2d6f841a4aaef6ef6d4075c0d&grant_type=refresh_token&client_id=webApp

如果此刷新令牌存在于数据库中,服务器将return给客户端一个新的访问令牌,而不需要用户username/password。