我在Angular 7应用程序中使用adal-angular4(https://www.npmjs.com/package/adal-angular4)进行Azure AD身份验证。adal-angular提供了一个有效期为1小时的访问令牌。我需要实现刷新令牌功能,以便使用AdalService的acquireToken()方法获取新令牌。我添加了必需的逻辑,以使用AcquireToken()方法获取刷新令牌。我什至获得了Refreshed Token,但是在Token过期之后,我的会话仍然过期。我编写了每5分钟运行一次的逻辑。逻辑检查令牌到期的纪元时间与当前时间之间的差异。如果时间差小于5分钟,则我调用AdalService acquisitionToken()方法,该方法将向我返回新的令牌。但是,令牌仍然在1小时后过期,并且我的会话超时。
以下是我的代码详细信息:-app.component.ts
ngOnInit() {
// Acquire Refresh Token
if (this.adalService.userInfo.authenticated) {
setInterval(() => {
this.authService.refreshToken(); }, 300000); // 300000 ms = 5 minutes
}
}
auth.service.ts
refreshToken(): boolean {
const token = this.adalService.userInfo.token;
const decodedToken = jwt_decode(token);
const tokenExpiresIn = decodedToken['exp'];
const currentEpochTime = Math.floor(new Date().getTime() / 1000.0);
const epochDiffInMins = Math.floor((tokenExpiresIn - currentEpochTime) / 60); // Epoch time difference in minutes
if (epochDiffInMins < 5) {
this.adalService.acquireToken(environment.adalConfig.clientId).toPromise().then((data) => {
this.processLoginRequest(this.adalService.userInfo);
return true;
},
(error) => {
return false;
});
}
return false;
}
processLoginRequest(response: any) {
if (response) {
localStorage.setItem(Constants.localStorageKeys.isLoggedIn, 'true');
localStorage.setItem(Constants.localStorageKeys.apiToken, JSON.stringify(response.token));
localStorage.setItem(Constants.localStorageKeys.userId, response.userName);
location.reload();
}
}
auth-gaurd.service.ts
@Injectable()
export class AuthGuardService implements CanActivate {
constructor(
private router: Router,
private logger: LoggerService,
private authService: AuthService,
private adalService: AdalService
) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const url: string = state.url;
if (!this.adalService.userInfo.authenticated) {
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
return false;
}
return true;
}
}
任何快速帮助将不胜感激。在此先感谢。
如果您的问题是超时时间过早,则可以将AcessTokenLifetime设置为一天。 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-configurable-token-lifetimes