如何以及何时使用刷新令牌?
How and when to use Refresh Tokens?
我正在慢慢掌握使用微服务进行身份验证的窍门,但我遇到了一个相当基本的问题。我假设的架构如下,一个 auth
微服务,处理注册、登录、令牌刷新,还有一个 TODOS
微服务处理用户的待办事项。
我想使用短期 JWT 和刷新令牌。
如何使用刷新令牌?由于 JWT 过期如此之快(几分钟),我是否向 todos
发出请求,同时如果 JWT 过期,我发回一个错误(未授权或 JWT 过期特定错误?)然后我做返回 auth
服务进行刷新,然后以某种方式再次调用 API?我是否在客户端上进行池化并定期检查 JWT 是否已过期?
这些是我的一些问题,但基本上可以归结为
- 如何处理 JWT 过期? (在 API 通话期间和空闲时)
- 我 return 是 JWT 已过期的特定错误还是只是 403?
- 如何处理这些往返(如果这是要走的路),在收到 403,然后授权刷新然后返回调用之间?
因此您的调用者拥有访问令牌和刷新令牌。
当调用者想要调用 api 时,他们将使用访问令牌。接收方将验证访问令牌(包括到期),如果访问令牌不再有效,将回答“访问被拒绝”。
当客户端访问被拒绝时,他们使用刷新令牌来获取新的访问令牌。
问题是为什么需要刷新令牌?正如您所说 - 访问令牌是短暂的。为什么这样?创建访问令牌后,每个 resource/api 都可以验证它。但是没有办法撤销访问令牌(带有撤销列表的选项很难正确实现);因此,我们使用短期访问令牌而不是撤销。
由于访问令牌的生命周期很短,如果他们不断要求批准另一个令牌,客户体验会很差;如果使用访问令牌代表客户做一些事情,这是不可能的。为了解决这个问题,我们有刷新令牌。刷新令牌用于获取新的访问令牌。
最重要的 属性 使用刷新令牌:这是令牌提供者有机会撤销访问权限的时刻 - 提供者可能决定此刷新令牌不再有效,例如因为客户决定停止访问。
你的问题:
- 如何处理 JWT 过期? (在 API 通话期间和空闲时)
您使用访问令牌调用 api,如果访问被拒绝,您可以使用刷新令牌获取新的访问令牌。这是最简单的方法。作为替代方案,您可以使用后端作业在访问令牌过期时刷新它们。这显然更复杂。
- 我 return 是 JWT 已过期的特定错误还是只是 403?
我不会。如果拒绝访问,则拒绝访问。
- 如何处理这些往返(如果这是要走的路),在收到 403,然后授权刷新然后返回调用之间?
不知道你是什么意思。我的代码(在此用例中)有一个简单的句柄——如果访问被拒绝,则使用刷新令牌获取新的访问令牌;然后缓存访问令牌。
我正在慢慢掌握使用微服务进行身份验证的窍门,但我遇到了一个相当基本的问题。我假设的架构如下,一个 auth
微服务,处理注册、登录、令牌刷新,还有一个 TODOS
微服务处理用户的待办事项。
我想使用短期 JWT 和刷新令牌。
如何使用刷新令牌?由于 JWT 过期如此之快(几分钟),我是否向 todos
发出请求,同时如果 JWT 过期,我发回一个错误(未授权或 JWT 过期特定错误?)然后我做返回 auth
服务进行刷新,然后以某种方式再次调用 API?我是否在客户端上进行池化并定期检查 JWT 是否已过期?
这些是我的一些问题,但基本上可以归结为
- 如何处理 JWT 过期? (在 API 通话期间和空闲时)
- 我 return 是 JWT 已过期的特定错误还是只是 403?
- 如何处理这些往返(如果这是要走的路),在收到 403,然后授权刷新然后返回调用之间?
因此您的调用者拥有访问令牌和刷新令牌。
当调用者想要调用 api 时,他们将使用访问令牌。接收方将验证访问令牌(包括到期),如果访问令牌不再有效,将回答“访问被拒绝”。
当客户端访问被拒绝时,他们使用刷新令牌来获取新的访问令牌。
问题是为什么需要刷新令牌?正如您所说 - 访问令牌是短暂的。为什么这样?创建访问令牌后,每个 resource/api 都可以验证它。但是没有办法撤销访问令牌(带有撤销列表的选项很难正确实现);因此,我们使用短期访问令牌而不是撤销。
由于访问令牌的生命周期很短,如果他们不断要求批准另一个令牌,客户体验会很差;如果使用访问令牌代表客户做一些事情,这是不可能的。为了解决这个问题,我们有刷新令牌。刷新令牌用于获取新的访问令牌。
最重要的 属性 使用刷新令牌:这是令牌提供者有机会撤销访问权限的时刻 - 提供者可能决定此刷新令牌不再有效,例如因为客户决定停止访问。
你的问题:
- 如何处理 JWT 过期? (在 API 通话期间和空闲时)
您使用访问令牌调用 api,如果访问被拒绝,您可以使用刷新令牌获取新的访问令牌。这是最简单的方法。作为替代方案,您可以使用后端作业在访问令牌过期时刷新它们。这显然更复杂。
- 我 return 是 JWT 已过期的特定错误还是只是 403?
我不会。如果拒绝访问,则拒绝访问。
- 如何处理这些往返(如果这是要走的路),在收到 403,然后授权刷新然后返回调用之间?
不知道你是什么意思。我的代码(在此用例中)有一个简单的句柄——如果访问被拒绝,则使用刷新令牌获取新的访问令牌;然后缓存访问令牌。