MSAL - 重定向 URI 上的 MsalGuard - 进入重定向循环

MSAL - MsalGuard on Redirect URI - getting into redirect loop

我正在我的 angular 应用程序中实现 msal,并且我正在使用 msal-v1 库。

我从记录的示例中获取了 angular-7 示例,并尝试在我的企业应用程序中实现以下代码。

我在app.module.ts

中添加了popup as false
MsalModule.forRoot(
      {
        auth: {
          clientId: "app client id",
          authority:
            "https://login.microsoftonline.com/tenant.onmicrosoft.com/",
          validateAuthority: true,
          redirectUri: window.location.origin,
          postLogoutRedirectUri:
            window.location.origin,
          navigateToLoginRequestUrl: true,
        },
        cache: {
          cacheLocation: "localStorage",
          storeAuthStateInCookie: isIE, // set to true for IE 11
        },
      },
      {
        popUp: false,
        consentScopes: ["user.read", "openid", "profile"],
        unprotectedResources: ["https://www.microsoft.com/en-us/"],
        protectedResourceMap,
        extraQueryParameters: {},
      }
    )

在 app-routing.module.ts 上,我添加了 MsalGuard on the empty route,因为我的应用程序没有任何登录按钮,默认登录页面也需要身份验证。

const routes: Routes = [
  {
    path: "",
    component: HomeComponent,
    canActivate: [MsalGuard],
  },
  {
    path: "profile",
    component: ProfileComponent,
    canActivate: [MsalGuard],
  },
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { useHash: false })],
  exports: [RouterModule],
})
export class AppRoutingModule {}

通过这样做,如果我在没有任何路由的情况下直接访问域 URL(即重定向 URI),我能够在本地存储中正确授权和获取令牌,但是如果我们清除本地存储并然后直接导航到配置文件路径,我无法获取令牌,因为它正在连续输入 redirect loop.

应用程序正在重定向到 /#id_token=eyJ,然后重定向到 /profile/#id_token=eyJ 等等。

请指导我如何保护我的 angular 应用程序中的所有路由,而不是进入重定向循环。

msal version - 1.4.4
msal-angular - 1.1.2

我在 github(msal-v1) 论坛中讨论了相同的问题,并通过设置一条没有 MsalGuard 但指向相同 HomeComponent.

const routes: Routes = [
  {
    path: '',
    component: HomeComponent,
    canActivate: [
      MsalGuard
    ]
  },
  {
    path: 'auth-redirect',
    component: HomeComponent
  },
  {
    path: 'profile',
    component: ProfileComponent,
    canActivate: [
      MsalGuard
    ]
  }
];

讨论了全部细节here