Adal Angular 4-刷新令牌未按预期工作

问题描述 投票:0回答:1

我在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;
    }
}

任何快速帮助将不胜感激。在此先感谢。

javascript angular azure-active-directory refresh-token adal-angular4
1个回答
0
投票

如果您的问题是超时时间过早,则可以将AcessTokenLifetime设置为一天。 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-configurable-token-lifetimes

© www.soinside.com 2019 - 2024. All rights reserved.