如何在Keycloak中指定刷新令牌的寿命

rok*_*rok 5 access-token oauth-2.0 openid-connect keycloak refresh-token

Keycloak刷新令牌的生存时间为1800秒:

“ refresh_expires_in”:1800

如何指定不同的默认到期时间?在Keycloak admin ui中,只能指定访问令牌的寿命:

在此处输入图片说明

小智 36

刷新令牌生命周期由 SSO 会话空闲设置控制。30 分钟 = 30 * 60 = 1800 秒(refresh_expires_in 值)

  • 事实上,情况要复杂得多。每个字段之间有很多关系,你可以在 3 个不同的地方覆盖它。 明确地说,Keycloak 是一个地狱。但对我来说,我必须将“Client Session Idle”设置为 0,“Client Session Max”设置为 0,“SSO Session Idle”设置为 999 天。之后,我可以使用“Access Token Lifespan”控制访问令牌超时,并使用“SSO Session Max”刷新令牌超时。我花了 1 个小时来研究所有变量。将采用“SSO 会话空闲”或“访问令牌生命周期”中时间较短的一个 (19认同)

dre*_*ash 19

如通过评论中指出@KubaŠimonovský接受的答案是缺少其他重要的因素:

实际上,它要复杂得多。

TL;DR可以推断出refresh token lifespan将等于 ( SSO Session Idle, Client Session Idle, SSO Session Max, 和Client Session Max) 中的最小值。


在花了一些时间研究这个之后,现在回顾这个线程,我觉得之前的答案不足以详细解释发生了什么(甚至可能会争辩说他们实际上是错误的)。

现在让我们假设我们只有SSO Session IdleSSO Session Max

  • SSO Session Max>SSO Session Idle在这种情况下refresh token lifetime与 相同SSO Session Idle。为什么?因为如果应用程序空闲SSO Session Idle一段时间,用户就会注销,这就是刷新令牌绑定到该值的原因。每当应用程序请求新令牌时,refresh token lifetimeSSO Session Idle倒计时值都会再次重置;
  • SSO Session Max<=SSO Session Idle那么refresh token lifetime将与SSO Session Max. 为什么?因为无论用户做什么(空闲与否),用户都会在SSO Session Max一段时间后注销,因此刷新令牌绑定到该值的原因。

从这里我们得出结论,刷新令牌寿命绑定到两个值中的最低值SSO Session IdleSSO Session Max

这两个值都与单点登录 (SSO) 相关。我们仍然需要考虑领域设置的Client Session IdleClient Session Max字段的值,当未设置时,它们分别与SSO Session Idle和相同SSO Session Max

如果设置了这些值,则在刷新令牌的上下文中,它们将覆盖来自SSO Session Idleand的值SSO Session Max,但仅当它们低于来自SSO Session Idleand的值时SSO Session Max

让我们看看以下示例:SSO Session Idle= 1800 秒,SSO Session Max= 10 小时和:

  1. Client Session Idle= 600 秒和Client Session Max= 1 小时。在这种情况下,refresh token lifespanClient Session Idle相同;
  2. Client Session Idle= 600 秒和Client Session Max= 60 秒。在这种情况下,refresh token lifespanClient Session Max相同。
  3. Client Session Idle= 1 天和Client Session Max= 10 天。在这种情况下,refresh token lifespanSSO Session Idle相同;

所以简而言之,您可以推断出这refresh token lifespan将等于 ( SSO Session Idle, Client Session Idle, SSO Session Max, 和Client Session Max)之间的最小值。

因此,先前答案中声称您可以简单地使用Client Session Max来控制刷新令牌寿命的说法是错误的。只需查看前面的示例 1) 和 3)。

最后,字段Client Session IdleClient Session Max来自领域设置可以被客户端本身中的Client Session Idle和覆盖Client Session Max,这将特别影响该refresh token lifespan客户端的 。

应用相同的逻辑,但不是考虑值Client Session IdleClient Session Max领域设置,而是需要考虑来自客户端高级设置的值。


小智 5

在 v11.0.3 中,在客户端的高级设置下,没有 SSO 会话空闲设置(不确定这些是刚刚重命名、移动还是管理界面中其他地方可用的领域设置),因此从默认客户端开始设置,您可以指定 Client Session Max 来控制刷新令牌生命周期,而无需更改其他持续时间设置(访问令牌生命周期按您的预期继续)。证据:调整设置并检查 refresh_expires 作为响应。