Keycloak-js updateToken(minValidity) 需要澄清

2024-05-16

我在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(使用前将#替换为@)

Keycloak-js updateToken(minValidity) 需要澄清 的相关文章

随机推荐