为啥 API 不使用访问令牌而不是刷新令牌?

Posted

技术标签:

【中文标题】为啥 API 不使用访问令牌而不是刷新令牌?【英文标题】:Why don't APIs use access token instead of refresh token?为什么 API 不使用访问令牌而不是刷新令牌? 【发布时间】:2018-04-17 15:24:37 【问题描述】:

我已经看过了

Why Does OAuth v2 Have Both Access and Refresh Tokens?

https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

据我了解,这就是 OAuth v2 的工作方式:

1) 用户将他的凭据发送到验证它的服务器并返回一个access_token 和一个refresh_token

2) 用户发送此 acsess_token 以及进一步的身份验证请求

3) 当access_token 过期时,用户向服务器发送另一个请求,其中包含refresh_token 和其他必需参数,要求新的access_tokenrefresh_token

这是我的问题:

单独的refresh_token 需要什么?为什么不发送旧的access_token反正即将过期),换一个新的??

使用refresh_token 的额外优势是什么?

【问题讨论】:

【参考方案1】:

理论上,访问令牌更重要。它可以在浏览器中,在客户端的服务器端,在授权服务器或资源服务器上。访问令牌将附加到每个 API 请求,而刷新令牌的使用频率则要低得多。

来自网络的一些引用......

与访问令牌不同,刷新令牌仅适用于授权服务器,绝不会发送到资源服务器。 https://www.rfc-editor.org/rfc/rfc6749#section-10.4

[刷新令牌]通常受到严格的存储要求,以确保它们不被泄露。 https://auth0.com/learn/refresh-tokens/

基本上,如果我们只有访问令牌,攻击面会更大。

【讨论】:

以上是关于为啥 API 不使用访问令牌而不是刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 JWT 刷新令牌

为啥不将 JWT 访问令牌存储在内存中并在 cookie 中刷新令牌?

为啥我们甚至需要通过 HTTPS 刷新令牌?

为啥刷新令牌过期不返回?

为啥要撤销访问令牌?

OAuth 2.0 访问令牌已过期,刷新令牌不可用