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

时间:2018-08-27 13:15:38

标签: oauth-2.0 access-token openid-connect keycloak refresh-token

Keycloak刷新令牌寿命为1800秒:

  

“ refresh_expires_in”:1800

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

enter image description here

4 个答案:

答案 0 :(得分:9)

正如 @Kuba Šimonovský 在评论中指出的,accepted answer 缺少其他重要因素:

<块引用>

实际上,它要复杂得多。

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 lifetimeSSO 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 IdleSSO Session Max 相同。

如果设置了这些值,则在刷新令牌的上下文中,它们将覆盖 SSO Session IdleSSO Session Max 中的值,但仅当它们低于 SSO Session Idle 中的值时和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 会话空闲相同;

简而言之,您可以推断 refresh token lifespan 将等于 (SSO Session IdleClient Session IdleSSO Session MaxClient Session Max) 之间的最小值。

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

最后,领域设置中的字段 Client Session IdleClient Session Max 可以被客户端本身的 Client Session IdleClient Session Max 覆盖,这将影响 {{1 }} 特别适用于该客户。

应用相同的逻辑,但不是考虑领域设置中的值 refresh token lifespanClient Session Idle,而是需要考虑客户端高级设置中的值。

答案 1 :(得分:1)

在v11.0.3中,在客户端的高级设置下,没有SSO会话空闲设置(不确定这些设置是否已被重命名,移动或在管理界面中其他位置是否可用的领域设置),因此开始如果使用默认客户端设置,则可以指定“客户端会话最大值”来控制刷新令牌的生存期,而无需更改其他持续时间设置(“访问令牌生存期”将按照您的预期继续进行)。证据:调整设置并检查是否有refresh_expires作为响应。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

刷新令牌寿命由领域设置的“令牌”选项卡中的“客户端会话最大值”参数定义。

也可以在客户端设置页面的“高级设置”菜单下在单个客户端级别覆盖它。

就像 Keycloak 文档中所述:https://www.keycloak.org/docs/latest/server_admin/#_timeouts

<块引用>

客户端会话最大值

刷新令牌前的最长时间是 过期和失效。它允许指定更短的 刷新令牌超时比会话超时。它可以是 覆盖单个客户端。它是一个可选配置和 如果未设置为大于 0 的值,则使用相同的空闲超时设置 在 SSO Session Max 配置中。