我有一个角度2应用程序,我使用adal lib对adfs进行身份验证。这实际上是开箱即用的,没有哈希的位置策略,这很棒。 ADFS重定向正在发送此参数,adal-service可以使用它。
#id_token=<sometokenvalue>
但由于某些原因,我需要使用哈希定位策略。在这种情况下,正确的URL会在浏览器的地址栏中弹出一秒钟,然后角度路由器正在做一些魔术,我的令牌丢失,网址看起来像这样:
http://localhost:4200/#/id_token
My SecretService看起来像这样:
public get adalConfig(): any {
return {
tenant: 'adfs',
instance: LoginConfig.getInstance(),
clientId: LoginConfig.getClientId(),
redirectUri: 'http://localhost:4200',
postLogoutRedirectUri: window.location.origin + '/',
isAngular: true
};
}
处理重定向的组件如下所示:
ngOnInit() {
this.adalService.handleWindowCallback();
if (this.adalService.userInfo.isAuthenticated) {
this.router.navigate(['/next']);
}
}
有人可以帮忙吗?
答案 0 :(得分:1)
我刚刚找到了解决问题的方法......
为了防止角度在处理令牌之前转发到另一条路径,我写了一个canActivateGuard,它首先调用handleWindowCallback()方法。
@Injectable()
export class HandleTokenCanActivateGuard implements CanActivate{
constructor(private adalService: AdalService) {}
canActivate() {
this.adalService.handleWindowCallback();
return true;
}
}