验证后如何解决重定向时的adal-angular4无限循环

时间:2019-07-26 11:28:12

标签: angular authentication azure-active-directory adal adal-angular4

我正在构建一个Angular 8应用程序,该应用程序使用adal-angular4针对Microsoft Azure Active Directory对用户进行身份验证。我已经设置了ASP.NET Core API,并与Azure上的客户端应用程序关联。

我已遵循以下文档来设置Active Directory:-

https://azure.microsoft.com/en-gb/resources/samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore/

以及以下用于使用adal-angular4设置Angular应用和.NET Core API的内容:-

https://www.digital-moves.eu/2018/07/19/authentication-with-azure-ad-angular-6-client-web-api/

重定向URL似乎可以正常工作,因为点击了我应用程序中的正确回调组件。但是,此时应用程序陷入了重新尝试登录和重定向的无尽循环。最终,登录尝试会产生异常“我们无法登录您。请重试”,可能是由于被锁定。

在我的app.module.ts中:-

  providers: [
    AdalService, { provide: HTTP_INTERCEPTORS, useClass: AdalInterceptor, multi: true },
    RefreshTokenService

我的adal配置文件:-

  private adalConfig = {
      tenant: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
      clientId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
      redirectUri: 'http://localhost:4200/auth-callback',
      postLogoutRedirectUri: "http://localhost:4200/end-session",
      endpoints: { "https://visionapi2019.azurewebsites.net": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" },
      cacheLocation: 'localStorage'
    };

  constructor(private adal: AdalService){
    this.adal.init(this.adalConfig);
  }

  ngOnInit() {
    this.adal.login();
  }

在我的回调组件中,我有以下内容:-

  ngOnInit() {
    this.adal.handleWindowCallback();
    this.router.navigate(['test-api']);
  }

导航到组件“ test-api”有效,但随后无限循环开始。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决了问题。我在路由器中使用了[RouterModule.forRoot(routes,{useHash:false})],还从app.component的ngOnInit()中删除了this.adal.login()-我猜想它正试图重新登录每次重定向,然后由于url中的哈希删除了id_token而失败。现在登录和重定向可以正常工作。