Ank*_*hal 11 authentication token angularjs keycloak
我有单页应用程序,该应用程序使用Angularjs并集成Keycloak用于身份验证和授权。
我能够登录我的应用程序,获得登录的用户角色等。刷新令牌调用的那一刻,它总是在我的其他情况下返回,并且用户注销应用程序。虽然令牌有效时间设置得非常高。
如果用户打开了应用程序,我需要更新令牌。如果失败或令牌过期,我需要注销用户。if (refreshed)总是返回假。
下面是我正在使用的一段代码。
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();
};
}
}
Run Code Online (Sandbox Code Playgroud)
Atr*_*opo 11
我在 API 文档中找不到解释,但函数的timeout参数keycloak.updateToken()以秒表示,而不是分钟。
因此,如果服务器上的访问令牌寿命为默认值 5 分钟,则应使用小于 300 秒的值。我通过一些实验了解到它。
//Update the token when will last less than 3 minutes
keycloak.updateToken(180)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我建议你使用寿命超过5分钟的令牌。
在您的代码中,您永远不会看到令牌刷新,因为在 15 秒的窗口中永远不会触发刷新。
Cha*_*nka 10
(refreshed) 仅当您的令牌未过期时才返回 false。因此,您正在尝试在令牌尚未过期时刷新令牌。
在您使用的Keycloak 领域中将“Access Token Lifespan ”设置为 1 分钟,然后尝试以下代码再次检查刷新状态
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());
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26540 次 |
| 最近记录: |