The Scenario
我最近构建了一个 ASP.NET WEB API
,并使用 OAuth
Bearer Access Tokens保护其资源 .
我使用了 Client_Credentials
Flow,因为它将被客户端访问而不是用户访问 .
这是事情,当客户端成功提供 client_id
和 client_secret
时,他们会收到如下响应: -
{
"access_token": "<Access Token>",
"token_type": "bearer",
"expires_in": 1199,
"refresh_token": "<Refresh Token>"
}
Refresh Tokens.
我不太了解刷新令牌,我立即假设客户端能够为OAuth服务器提供 refresh_token
来检索新的 Access_Token
.
这有点'正确' .
为了使用 refresh_token
,客户端仍然需要将 client_id
和 client_secret
与 refresh_token
一起传递以获取新的访问令牌 .
grant_type
也需要更改为 refresh_token
.
使用此流程的refresh_token的好处在哪里?如果我每次都需要传递client_id和client_secret,那么你肯定会完全避免使用刷新令牌吗?
2 回答
使用客户端凭据授予发布刷新令牌没有任何好处 . 这就是RFC6749 section 4.4.3表示
A refresh token SHOULD NOT be included
的原因 . 因此,它的发布由授权服务器决定 .从我的角度来看,授权服务器永远不应该发布带有客户端凭证授权的刷新令牌,因为访问令牌颁发过程将采取额外且不必要的步骤:
使用client_credentials授予类型发布:
第一步:客户端身份验证(客户端密钥,断言......)
发出OK访问令牌
使用refresh_token授权类型发布:
第一步:客户端身份验证(客户端密钥,断言......)
第二步:刷新令牌验证(到期时间,关联客户端......)
发出OK访问令牌
好处是他请求令牌通常具有比访问令牌更长的寿命 .
访问令牌用于与资源服务器通信 . 与授权服务器通信时使用请求令牌 .
您可以将此视为您可能获得授权,但您的授权的确切范围需要不时重新评估 . 所以请求令牌使用它 .