【发布时间】:2021-02-22 21:26:34
【问题描述】:
在过去的几天里,我一直在阅读有关使用刷新和访问令牌进行身份验证的内容,但这是我找不到答案的一件事。假设发送了过期的访问令牌。后端应该自动刷新它(如果提供了刷新令牌),还是应该只在刷新端点处进行刷新?
例如,考虑以下两个身份验证流程:
自动刷新
- 用户使用用户名和密码进行身份验证。 API 会发回一个包含他的数据的短期访问令牌和一个长期刷新令牌。
- 对于需要身份验证/授权的每个请求,用户将在请求标头上发送两个令牌。
- 如果访问令牌已过期,API 将检查是否发送了有效的刷新令牌、是否处于活动状态以及是否与访问令牌属于同一用户。如果一切正常,它将签署一个新的访问令牌并用它更新响应标头。
前端不必担心刷新令牌,但它仍然需要在每次请求后查找响应头以检查是否发送了新令牌。
手动刷新
- 用户使用用户名和密码进行身份验证。 API 会发回一个包含他的数据的短期访问令牌和一个长期刷新令牌。
- 对于每个需要身份验证/授权的请求,用户将发送他的访问令牌。
- 当访问令牌过期时,用户会将他的刷新令牌发送到
refresh/路由。 API 检查令牌是否有效。如果一切正常,它会返回一个新的访问令牌。
在每次请求后,客户端必须检查令牌是否过期,如果过期则必须执行新请求以刷新令牌。正在向服务器发出更多请求,但另一方面,职责更好地分离,因为 auth 路由只负责处理访问令牌,而刷新令牌处理存在于另一个路由中。
我很难找到有关该主题的资源,因此我不太确定哪种解决方案更好,或者即使我描述的解决方案完全正确。如果我必须选择一个,我会选择自动刷新,因为发出的请求更少,客户端可用性看起来更好,但正如我所说,我不是 100% 的,因此我正在制作那个线程.
应该如何刷新访问令牌?
【问题讨论】:
标签: authentication oauth-2.0 access-token refresh-token