由于哈希位置策略

时间:2017-06-28 08:24:13

标签: angular adfs angular-routing adal

我有一个角度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']);
    }
  }

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我刚刚找到了解决问题的方法......

为了防止角度在处理令牌之前转发到另一条路径,我写了一个canActivateGuard,它首先调用handleWindowCallback()方法。

@Injectable()
export class HandleTokenCanActivateGuard implements CanActivate{

constructor(private adalService: AdalService) {}

canActivate() {
    this.adalService.handleWindowCallback();
    return true;
  }
}