【发布时间】:2022-01-23 03:49:56
【问题描述】:
我在我的 Angular 7 应用程序中使用 adal-angular4 (https://www.npmjs.com/package/adal-angular4) 进行 Azure AD 身份验证。 adal-angular 提供了一个访问令牌,其有效期为 1 小时。 我需要实现刷新令牌功能,以便使用 AdalService 的 acquireToken() 方法获取新令牌。我添加了使用 acquireToken() 方法获取刷新令牌所需的逻辑。我什至得到了刷新的令牌,但在令牌过期后我的会话仍然过期。 我编写了每 5 分钟运行一次的逻辑。逻辑检查Token过期的Epoch时间与当前时间的差异。如果这个时间差小于 5 分钟,那么我调用 AdalService acquireToken() 方法,它会返回新的 Token。但是,令牌仍然会在 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;
}
}
任何快速帮助将不胜感激。提前致谢。
【问题讨论】:
标签: javascript angular azure-active-directory refresh-token adal-angular4