Keycloak-js updateToken(minValidity) 需要澄清

4

我看了很多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');
     * });
     */

我不是母语为英语的人。这里“expires within”这个术语不够精确。

通过一个图示更易理解。此方法 updateToken 在时间窗口 minValidity 内定期检查令牌是否已过期。

enter image description here

令牌何时会被刷新?

当Keycloak令牌接近到期时,令牌将会在以下两种情况下被刷新:

  • 在时间窗口minValidity内,紧接着它的到期日期(蓝色)之前。
  • 或者在下一次更新检查之后。(橙色)

在蓝色的情况下,minValidity 的值越大越合适。

在橙色的情况下,较小的值更好。

我理解这是蓝色情况。

奖励问题:如果令牌持续时间小于 minValidity,会发生什么?

1个回答

4
总的来说,您需要避免将AccessToken发送到服务器/服务并因其不再有效而被拒绝。因此,在使用令牌之前每次检查其有效性是一个好习惯。正如文档中所述:对服务/后端的调用应仅在updateToken方法的回调中进行。但除此之外,没有自动定期检查刷新令牌。如果您在客户端检查令牌(isTokenExpired() => false),它仍将有效,但有可能在请求到达服务时,令牌将不再有效并被拒绝。因此,我们希望避免这种情况。 minValidity将在剩余AccessToken生命周期仅为1秒的情况下发挥作用。默认的minValidity值为5秒。因此,在调用updateToken方法并且令牌仍然有效但在接下来的5秒内将过期时,令牌将被刷新,并且回调内的任何服务/后端调用都将使用新令牌。但是,调用本身并不一定意味着要使用新令牌。如果剩余的生命周期足够长,则不会发生任何事情。在您的示例中,蓝色情况是正确的。第二个“更新”调用(如果您指的是updateToken方法调用)将触发令牌刷新。但再次强调:更新调用不会自动执行。您需要实现定期检查或在后端调用之前调用updateToken。至于您的奖励问题:我查看了代码,并且在一个虚构的情况下,例如minValidity为60秒,但新鲜的令牌始终只有效30秒,对updateToken的调用将每次都触发刷新。但是,在我看来不会出现循环刷新的情况。

谢谢,我对蓝色案例的想法。如果令牌持续时间小于最小有效期,那么updateToken将会在每次触发时刷新。 - Raymond Chenon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接