access-token - IdentityServer4 访问令牌生命周期
问题描述
我正在使用 IdentityServer4,它的配置在数据库中。客户端 (oidc) 有静默更新。我为客户端设置了以下生命周期设置:
AbsoluteRefreshTokenLifetime = 60 * 30,//30 mins
AccessTokenLifetime = 60 * 5,//5 mins
SlidingRefreshTokenLifetime = 60 * 15 // 15 mins
应该发生什么?令牌的生命周期应该是多长?什么时候应该要求用户再次登录?没有关于令牌生命周期何时刷新以及何时过期的明确文档。
解决方案
访问令牌可以有两种形式 - 自包含或引用。
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 分钟,它就会过期。
访问令牌不会自动刷新。您需要在客户端中添加代码以请求新的访问令牌。如果刷新令牌不可用或已过期,您可以将用户发送到登录页面。
推荐阅读
- ios - SWIFT:navigationviewcontroller 不会将应用程序转换到另一个视图控制器
- regex - 一次匹配 2 个模式的正则表达式或匹配两者的 Applescript 中的 SED
- reactjs - InAppBrowser 未在 Ionic React App 中打开
- ansible - Ansible Jinja2 模板循环迭代
- html - 阻止 VSCode 在“#”符号后“绿化”我的 Dust / HTML 代码
- android - 使用导航组件在堆栈中添加片段链
- javascript - '(props: any, context?: any): 组件
' 已弃用 - spring-boot - 无法在 Windows 上使用 bat 文件运行 Spring Boot 应用程序
- flutter - 如何将客户登录详细信息添加到 Firebase?
- python - 使用部分多索引选择多个值