正如评论中指出的@库巴西蒙诺夫斯基 https://stackoverflow.com/users/3994868/kuba-%C5%A0imonovsk%C3%BD the 接受的答案 https://stackoverflow.com/a/54679852/1366871缺少其他重要因素:
事实上,情况要复杂得多。
TL;DR人们可以推断出refresh token lifespan
将等于 (SSO Session Idle
, Client Session Idle
, SSO Session Max
, and Client Session Max
).
在花了一些时间研究这个问题之后,现在回头看这个线程,我觉得之前的答案感觉简短,无法详细解释发生了什么(有人甚至可能会争辩说他们实际上是错误的)。
现在让我们假设我们只有SSO Session Idle
and SSO Session Max
:
- and
SSO Session Max
> SSO Session Idle
在这种情况下refresh token lifetime
是相同的SSO Session Idle
。为什么?因为如果应用程序空闲了SSO Session Idle
用户注销的时间,这就是刷新令牌绑定到该值的原因。每当应用程序请求新令牌时,refresh token lifetime
and SSO Session Idle
倒计时值将再次重置;
- and
SSO Session Max
<= SSO Session Idle
那么refresh token lifetime
将与以下相同SSO Session Max
。为什么?因为无论用户做什么(i.e.,是否空闲)用户在之后注销SSO Session Max
时间,以及为什么刷新令牌绑定到该值。
从这里我们得出结论,刷新令牌的寿命必然是两个值中的最小值SSO Session Idle
and SSO Session Max
.
这两个值都与单点登录 (SSO) 相关。我们仍然需要考虑Client Session Idle
and Client Session Max
领域设置的字段,未设置时与SSO Session Idle
and SSO Session Max
, 分别。
如果设置了这些值,则在刷新令牌的上下文中,它们将覆盖来自SSO Session Idle
and SSO Session Max
,但仅当它们低于来自的值SSO Session Idle
and 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
= 600 秒并且Client Session Max
= 60 秒。在这种情况下,refresh token lifespan
是相同的最大客户端会话数.
-
Client Session Idle
= 1 天并且Client Session Max
= 10 天。在这种情况下,refresh token lifespan
是相同的SSO 会话空闲;
简而言之,你可以推断出refresh token lifespan
将等于 (SSO Session Idle
, Client Session Idle
, SSO Session Max
, and Client Session Max
).
因此,之前的答案声称您可以简单地使用Client Session Max
控制刷新令牌的生命周期是FALSE。只需看一下前面的示例 1) 和 3)。
最后,田野Client Session Idle
and Client Session Max
领域设置中的内容可以被覆盖Client Session Idle
and Client Session Max
客户本身,这会影响refresh token lifespan
特别是对于该客户。
应用相同的逻辑,但不考虑值Client Session Idle
and Client Session Max
从领域设置来看,我们需要考虑客户端高级设置。