我在Keycloak-js中阅读了很多该方法的示例,但没有对以下方法进行明确的解释。
updateToken(minValidity: number): KeycloakPromise<boolean, boolean>;
注意:我正在使用"keycloak-js": "^15.0.2"
这是它的文档
/**
* If the token expires within `minValidity` seconds, the token is refreshed.
* If the session status iframe is enabled, the session status is also
* checked.
* @returns A promise to set functions that can be invoked if the token is
* still valid, or if the token is no longer valid.
* @example
* ```js
* keycloak.updateToken(5).then(function(refreshed) {
* if (refreshed) {
* alert('Token was successfully refreshed');
* } else {
* alert('Token is still valid');
* }
* }).catch(function() {
* alert('Failed to refresh the token, or the session has expired');
* });
*/
我的母语不是英语。术语“在期限内到期”在这里并不精确。
举个例子就更好理解了。这个方法updateToken
定期检查令牌在时间窗口内是否过期minValidity
令牌什么时候刷新?
当 keycloak 令牌到期时,令牌刷新可以是:
- 就在其到期日期之前的时间窗口内
minValidity
( blue)
- 或者在下一个周期更新检查之后。 (橙子)
在蓝色的情况下,有足够大的值是有意义的minValidity
.
在橙色的情况下,值越小越好。
据我了解,这是蓝色的情况。
奖金问题:如果令牌持续时间
总的来说,您希望避免将 AccessToken 发送到服务器/服务并且由于它不再有效而被拒绝的情况。
因此,每次使用令牌之前检查有效性是个好主意。正如文档提到的:对服务/后端的调用只能在updateToken
方法。但除此之外,没有(自动)定期检查刷新令牌。
The minValidity
如果您想象一下剩余的 AccessToken 生命周期只有 1 秒的情况,就会出现这种情况。
如果您检查客户端的令牌(isTokenExpired()
=> false
)它仍然有效,但有可能当请求到达服务时,令牌将不再有效并被拒绝。 => 我们想避免这种情况
默认值为minValidity
是5秒。所以当调用updateToken
方法和令牌仍然有效,但将在接下来的 5 秒内过期,令牌将被刷新,并且回调内的任何服务/后端调用都将使用新令牌。但调用本身并不一定意味着新的令牌。如果剩余寿命足够长,则不会发生任何事情。
所以在你的例子中蓝色的情况是正确的。第二个“更新”调用(如果您的意思是updateToken
方法调用)将已经触发令牌刷新。但同样:更新调用不会自动完成。您需要在后端调用之前实施定期检查或调用 updateToken。
对于你的额外问题:我研究了代码并在一个虚构的情况下,例如minValidity 为 60 秒,但新的令牌始终仅在 30 秒内有效,每次调用 updateToken 都会触发刷新。但恕我直言,不会出现重复的“刷新循环”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)