Javascript 获取令牌静默方法在Angular 9中无法正常工作

Javascript 获取令牌静默方法在Angular 9中无法正常工作,javascript,angular,azure,msal,Javascript,Angular,Azure,Msal,我已经在AAD上设置了令牌会话到期时间15分钟 概述 登录web应用程序,获取一个到期时间为15分钟的令牌,并将其存储在本地会话存储中 登录后调用每秒运行的timmer方法。在此方法中,获取令牌过期时间并设置逻辑以调用acquireTokenSilent方法并静默刷新令牌 版本 MSAL:0.2.4, 角度:6 代码 setTimer(){ this.interval=setInterval(()=>{ const token=sessionStorage.getItem('msal.id

我已经在AAD上设置了令牌会话到期时间15分钟

概述

  • 登录web应用程序,获取一个到期时间为15分钟的令牌,并将其存储在本地会话存储中
  • 登录后调用每秒运行的timmer方法。在此方法中,获取令牌过期时间并设置逻辑以调用acquireTokenSilent方法并静默刷新令牌
版本 MSAL:0.2.4, 角度:6

代码

setTimer(){
this.interval=setInterval(()=>{
const token=sessionStorage.getItem('msal.idtoken');
如果(令牌){
const base64Url=token.split('.')[1];
const base64=base64Url.replace(/-/g,“+”).replace(/\ug,“/”);
const jsonPayload=decodeURIComponent(
atob(base64)
.拆分(“”)
.map(功能(c){
返回“%”+('00'+c.charCodeAt(0).toString(16)).slice(-2);
})
.加入(“”)
);
const sessionPayload=JSON.parse(jsonPayload);
const date=新日期(0);
const sessionTimeOut=date.setUTCSeconds(sessionPayload.exp-2*60);
const currentTime=新日期();
if(currentTime.valueOf()>sessionTimeOut.valueOf()){
这个.stopInterval();
这个。getToken();
}
}
}, 1000);
}
getToken(){
返回此.app.acquireTokenSilent(this.applicationConfig.b2cScopes)。然后(
(accessToken)=>{
this.accessToken=accessToken;
这个.saveAccessTokenToCache(accessToken);
返回accessToken;
},
(错误)=>{
返回此.app
.acquireTokenPopup(此.applicationConfig.b2cScopes)
.那么(
(accessToken)=>{
this.accessToken=accessToken;
这个.saveAccessTokenToCache(accessToken);
返回accessToken;
},
(错误)=>{
console.error('error',error);
}
);
}
);
}
停止间隔(){
clearInterval(这个.interval);
}
saveAccessTokenToCache(accessToken:string):无效{
sessionStorage.setItem('msal.idtoken',accessToken');
这个.setTimer();

}
sessionPayload.exp-2*60
?它应该是
(sessionPayload.exp-2)*60
。我已经实现了最新的MSAL angular版本(v1.4.3),但仍然面临一个问题:登录成功后,在epiration调用acquireTokenSilent方法刷新令牌5分钟之前,它只刷新第一次,第二次打开弹出窗口进行交互。