答案 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 Idle
和 SSO Session Max
:
SSO Session Max
> SSO Session Idle
在这种情况下,refresh token lifetime
与 SSO Session Idle
相同。为什么?因为如果应用程序空闲 SSO Session Idle
时间,用户会退出,这就是刷新令牌绑定到该值的原因。每当应用程序请求新令牌时,refresh token lifetime
和 SSO Session Idle
倒计时值都将再次重置;SSO Session Max
<= SSO Session Idle
那么 refresh token lifetime
将与 SSO Session Max
相同。为什么?因为无论用户做什么(即空闲与否),用户都会在 SSO Session Max
时间后注销,因此刷新令牌绑定到该值。从这里我们得出结论,刷新令牌的生命周期绑定到两个值 SSO Session Idle
和 SSO Session Max
中的最低值。
这两个值都与单点登录 (SSO) 相关。我们仍然需要考虑领域设置的 Client Session Idle
和 Client Session Max
字段的值,当未设置时,它们分别与 SSO Session Idle
和 SSO Session Max
相同。>
如果设置了这些值,则在刷新令牌的上下文中,它们将覆盖 SSO Session Idle
和 SSO Session Max
中的值,但仅当它们低于 SSO Session Idle
中的值时和SSO Session Max
。
让我们看看以下示例:SSO Session Idle
= 1800 秒,SSO Session Max
= 10 小时和:
Client Session Idle
= 600 秒和 Client Session Max
= 1 小时。在这种情况下,refresh token lifespan
与 Client Session Idle 相同;Client Session Idle
= 600 秒和 Client Session Max
= 60 秒。在这种情况下,refresh token lifespan
与 Client Session Max 相同。Client Session Idle
= 1 天和 Client Session Max
= 10 天。在这种情况下,refresh token lifespan
与 SSO 会话空闲相同;简而言之,您可以推断 refresh token lifespan
将等于 (SSO Session Idle
、Client Session Idle
、SSO Session Max
和 Client Session Max
) 之间的最小值。
因此,先前答案中关于您可以简单地使用 Client Session Max
来控制刷新令牌寿命的说法是错误的。只需看一下前面的示例 1) 和 3).
最后,领域设置中的字段 Client Session Idle
和 Client Session Max
可以被客户端本身的 Client Session Idle
和 Client Session Max
覆盖,这将影响 {{1 }} 特别适用于该客户。
应用相同的逻辑,但不是考虑领域设置中的值 refresh token lifespan
和 Client 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 配置中。