首页 > 解决方案 > IdentityServer4 访问令牌生命周期

问题描述

我正在使用 IdentityServer4,它的配置在数据库中。客户端 (oidc) 有静默更新。我为客户端设置了以下生命周期设置:

AbsoluteRefreshTokenLifetime =  60 * 30,//30 mins
AccessTokenLifetime = 60 * 5,//5 mins
SlidingRefreshTokenLifetime = 60 * 15 // 15 mins

应该发生什么?令牌的生命周期应该是多长?什么时候应该要求用户再次登录?没有关于令牌生命周期何时刷新以及何时过期的明确文档。

标签: access-tokenidentityserver4

解决方案


访问令牌可以有两种形式 - 自包含或引用。

JWT 令牌将是一个自包含的访问令牌 - 它是一个受保护的数据结构,具有声明和过期时间。一旦 API 了解了密钥材料,它就可以验证自包含令牌,而无需与发行者通信。这使得 JWT 难以撤销。它们将一直有效,直到到期。

来自http://docs.identityserver.io/en/latest/topics/reference_tokens.html#reference-tokens

刷新令牌允许获得对 API 的长期访问。

您通常希望尽可能短地保持访问令牌的生命周期,但同时又不想一遍又一遍地通过前端通道往返 IdentityServer 来请求新令牌来打扰用户。

刷新令牌允许在没有用户交互的情况下请求新的访问令牌。每次客户端刷新令牌时,它都需要对 IdentityServer 进行(经过身份验证的)反向通道调用。这允许检查刷新令牌是否仍然有效,或者同时已被撤销。

来自http://docs.identityserver.io/en/latest/topics/grant_types.html#refresh-tokens

所以 Access Token 是自包含的,这意味着它不能被修改。一旦颁发,令牌将一直有效,直到过期。这就是为什么您要使用短期令牌的原因。

为了使访问令牌更新过程自动化,您可以使用刷新令牌。这是一个强大的令牌,因为它可以用于请求访问令牌而无需用户交互。刷新令牌应该是长期存在的(至少比访问令牌长)。

刷新令牌过期后,用户必须再次登录。如果不滑动过期,刷新令牌将在绝对时间内过期,让用户再次登录。

通过滑动到期,您可以设置更短的刷新令牌生命周期。因为每次请求访问令牌时,都会发出一个新的刷新令牌。延长生命周期并使使用的刷新令牌无效。

只要刷新令牌有效,用户就可以访问资源而无需再次登录。在您的情况下,如果用户处于非活动状态超过 30 分钟,它就会过期。

访问令牌不会自动刷新。您需要在客户端中添加代码以请求新的访问令牌。如果刷新令牌不可用或已过期,您可以将用户发送到登录页面。


推荐阅读