刷新 id_token 编辑:Angular 4
Refresh id_token ADAL: Angular 4
我使用 Angular 4 和 ADAL 在我的 Web 应用程序中对用户进行身份验证,使用 ng2-adal 库,它是 adal.js.
的包装器
我面临的问题如下:
所以令牌在一个时间限制后过期,我有一个 canActivate 路由保护来检查用户是否已通过身份验证。如果没有,它会将用户导航到登录页面。这是我的路线守卫的样子:
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AdalService } from 'ng2-adal/dist/core';
@Injectable()
export class RouteGuard implements CanActivate {
constructor(private router: Router, private adalService: AdalService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.adalService.userInfo.isAuthenticated) {
return true;
} else {
this.router.navigate(['/user-login']);
return false;
}
}
}
所以只要令牌过期,用户就会被导航到登录页面,这对用户来说很烦人。有什么方法可以在令牌过期时续订令牌吗?
我明白了。我是这样添加的:
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AdalService } from 'ng2-adal/dist/core';
@Injectable()
export class RouteGuard implements CanActivate {
constructor(private router: Router, private adalService: AdalService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.adalService.userInfo.isAuthenticated) {
return true;
} else {
this.adalService.acquireToken(this.adalService.config.clientId).toPromise().then((data) => {
console.log('Generating a new authentication token.');
return true;
},
(error) => {
console.log('No user logged in.');
this.router.navigate(['/user-login']);
return false;
}
}
}
}
我遇到了同样的问题,我的修复成功了。
在 app.component.ts 中,将此代码添加到 ngOnit()。
this.adalService.handleWindowCallback();
this.adalService.acquireToken(this.adalService.config.loginResource).subscribe(token => {
this.adalService.userInfo.token = token;
if (this.adalService.userInfo.authenticated === false) {
this.adalService.userInfo.authenticated = true;
this.adalService.userInfo.error = '';
}
}, error => {
this.adalService.userInfo.authenticated = false;
this.adalService.userInfo.error = error;
this.adalService.login();
});
当令牌过期时,应用程序组件被调用,并获取令牌以静默方式刷新令牌。但是 this.adalService.userInfo.authenticated
仍然是错误的,导致重定向或再次调用登录方法。因此手动将其设置为 true 可以修复重定向错误。 this.adalService.config.loginResource
这是由 adal-angular 本身使用我们需要令牌的资源自动设置的。
还将 expireOffsetSeconds: 320,
添加到 adal 配置数据设置以及
tenant: configData.adalConfig.tenant,
clientId: configData.adalConfig.clientId,
redirectUri: window.location.origin,
expireoffsetseconds 根据我们在实际到期前指定的时间使令牌失效。
我使用 Angular 4 和 ADAL 在我的 Web 应用程序中对用户进行身份验证,使用 ng2-adal 库,它是 adal.js.
的包装器我面临的问题如下: 所以令牌在一个时间限制后过期,我有一个 canActivate 路由保护来检查用户是否已通过身份验证。如果没有,它会将用户导航到登录页面。这是我的路线守卫的样子:
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AdalService } from 'ng2-adal/dist/core';
@Injectable()
export class RouteGuard implements CanActivate {
constructor(private router: Router, private adalService: AdalService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.adalService.userInfo.isAuthenticated) {
return true;
} else {
this.router.navigate(['/user-login']);
return false;
}
}
}
所以只要令牌过期,用户就会被导航到登录页面,这对用户来说很烦人。有什么方法可以在令牌过期时续订令牌吗?
我明白了。我是这样添加的:
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AdalService } from 'ng2-adal/dist/core';
@Injectable()
export class RouteGuard implements CanActivate {
constructor(private router: Router, private adalService: AdalService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.adalService.userInfo.isAuthenticated) {
return true;
} else {
this.adalService.acquireToken(this.adalService.config.clientId).toPromise().then((data) => {
console.log('Generating a new authentication token.');
return true;
},
(error) => {
console.log('No user logged in.');
this.router.navigate(['/user-login']);
return false;
}
}
}
}
我遇到了同样的问题,我的修复成功了。 在 app.component.ts 中,将此代码添加到 ngOnit()。
this.adalService.handleWindowCallback();
this.adalService.acquireToken(this.adalService.config.loginResource).subscribe(token => {
this.adalService.userInfo.token = token;
if (this.adalService.userInfo.authenticated === false) {
this.adalService.userInfo.authenticated = true;
this.adalService.userInfo.error = '';
}
}, error => {
this.adalService.userInfo.authenticated = false;
this.adalService.userInfo.error = error;
this.adalService.login();
});
当令牌过期时,应用程序组件被调用,并获取令牌以静默方式刷新令牌。但是 this.adalService.userInfo.authenticated
仍然是错误的,导致重定向或再次调用登录方法。因此手动将其设置为 true 可以修复重定向错误。 this.adalService.config.loginResource
这是由 adal-angular 本身使用我们需要令牌的资源自动设置的。
还将 expireOffsetSeconds: 320,
添加到 adal 配置数据设置以及
tenant: configData.adalConfig.tenant,
clientId: configData.adalConfig.clientId,
redirectUri: window.location.origin,
expireoffsetseconds 根据我们在实际到期前指定的时间使令牌失效。