首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KEYCLOAK -刷新/更新令牌不工作

KEYCLOAK -刷新/更新令牌不工作
EN

Stack Overflow用户
提问于 2017-02-28 03:45:04
回答 5查看 42.5K关注 0票数 16

我有使用Angularjs构建并与Keycloak集成的单页应用程序,用于身份验证和授权

我能够登录到我的应用程序,获得loggedin用户角色等进行刷新令牌调用,它总是返回在我的其他情况下,用户注销的应用程序。虽然令牌的有效时间设置得很高。

如果用户打开了应用程序,我需要更新令牌。如果出现故障或过期令牌,我需要注销用户。if (refreshed)总是返回false。

下面是我正在使用的代码。

代码语言:javascript
运行
复制
var __env = {};

        Object.assign(__env, window.__env);

        var keycloakConfig = {
            "url" : __env.keycloakUrl,
            "realm" : __env.keycloakRealm,
            "clientId" : __env.keycloakClientId,
            "credentials" : {
            "secret" : __env.keycloakSecret
            }
        };
var keycloak = Keycloak(keycloakConfig);
        keycloak.init({
            onLoad : 'login-required'
        }).success(function(authenticated) {
                 if(authenticated){                  
                        keycloak.loadUserInfo().success(function(userInfo) {
                        bootstrapAngular(keycloak, userInfo, roles);
                    });
            }
        });

function bootstrapAngular(keycloak, userInfo, roles) {
        angular.module('myApp').run(
                function($rootScope, $http, $interval, $cookies) {
                    var updateTokenInterval = $interval(function() {
                        // refresh token if it's valid for less then 15 minutes
                    keycloak.updateToken(15).success(
                                function(refreshed) {
                                    if (refreshed) {
                                        $cookies.put('X-Authorization-Token',
                                                keycloak.token);
                                    }else{
                                        $rootScope.logoutApp();
                                    }
                                });
                    }, 600000);
                    updateTokenInterval;
                    $cookies.put('X-Authorization-Token', keycloak.token);

                    $rootScope.logoutApp = function() {
                        $cookies.remove('X-Authorization-Token');
                        $interval.cancel(updateTokenInterval);
                        keycloak.logout();
                    };
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-09-18 13:14:59

我在API文档中找不到解释,但是keycloak.updateToken()函数的keycloak.updateToken()参数是用表示的,而不是分钟。

因此,如果服务器上的访问令牌生存期为默认值5分钟,则应使用小于300秒的值。我是在做一些实验时学到的。

代码语言:javascript
运行
复制
//Update the token when will last less than 3 minutes
keycloak.updateToken(180)

顺便说一句,我建议你用5分钟以上的时间来做记号。

在您的代码中,您从未看到令牌刷新,因为刷新从未在将工作的15秒窗口中触发。

票数 14
EN

Stack Overflow用户

发布于 2020-04-09 19:51:55

(刷新)只有在令牌未过期时才返回false。因此,当令牌尚未过期时,您将尝试刷新它。

在您正在使用的Keycloak领域中将“访问令牌寿命”设置为1分钟,然后尝试下面的代码再次检查刷新的状态

代码语言:javascript
运行
复制
keycloak.onTokenExpired = ()=>{
            console.log('expired '+new Date());
            keycloak.updateToken(50).success((refreshed)=>{
                if (refreshed){
                    console.log('refreshed '+new Date());
                }else {
                    console.log('not refreshed '+new Date());
                }
            }).error(() => {
                 console.error('Failed to refresh token '+new Date());
            });
            }
票数 9
EN

Stack Overflow用户

发布于 2018-12-28 04:18:29

我看看它们的示例代码:

代码语言:javascript
运行
复制
        /**
     * 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).success(function(refreshed) {
     *   if (refreshed) {
     *     alert('Token was successfully refreshed');
     *   } else {
     *     alert('Token is still valid');
     *   }
     * }).error(function() {
     *   alert('Failed to refresh the token, or the session has expired');
     * });
     */

因此,我认为您的令牌仍然有效,这就是为什么updateToken返回false的原因。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42499818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档