如何解决获得令牌静默方法在Angular 9中无法正常工作
我已在AAD上设置令牌会话的过期时间为15分钟,
概述
- 登录到Web应用程序并获取一个令牌,令牌的到期时间为15分钟,并将其存储在本地会话存储中。
- 登录后,调用每秒运行的timmer方法。这种方法可以获取令牌到期时间并设置逻辑以调用acquireTokenSilent方法并以静默方式刷新令牌。
版本 MSAL:0.2.4, 角度:6
代码
setTimer() {
this.interval = setInterval(() => {
const token = sessionStorage.getItem('msal.idtoken');
if (token) {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g,'+').replace(/_/g,'/');
const jsonPayload = decodeURIComponent(
atob(base64)
.split('')
.map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
})
.join('')
);
const sessionPayload = JSON.parse(jsonPayload);
const date = new Date(0);
const sessionTimeOut = date.setUTCSeconds(sessionPayload.exp - 2 * 60);
const currentTime = new Date();
if (currentTime.valueOf() > sessionTimeOut.valueOf()) {
this.stopInterval();
this.getToken();
}
}
},1000);
}
getToken() {
return this.app.acquireTokenSilent(this.applicationConfig.b2cScopes).then(
(accessToken) => {
this.accessToken = accessToken;
this.saveAccessTokenToCache(accessToken);
return accessToken;
},(error) => {
return this.app
.acquireTokenPopup(this.applicationConfig.b2cScopes)
.then(
(accessToken) => {
this.accessToken = accessToken;
this.saveAccessTokenToCache(accessToken);
return accessToken;
},(err) => {
console.error('error',error);
}
);
}
);
}
stopInterval() {
clearInterval(this.interval);
}
saveAccessTokenToCache(accessToken: string): void {
sessionStorage.setItem('msal.idtoken',accessToken);
this.setTimer();
}
问题 登录后,会刷新13分钟的令牌,但第二次没有刷新令牌调用。
要求
需要在令牌到期之前每2分钟刷新一次令牌。
朋友,请帮助我。
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。