Angular从kerberos身份验证中获取数据

问题描述 投票:2回答:2

我有一个带有后端的角度应用程序。在应用程序启动之前,浏览器使用Kerberos管理身份验证。响应包含一个带有角色的JWT。

当应用程序开始获取用户凭据时,我的方法是对服务器进行额外的HTTP调用。这是通过APP_INITIALIZER中的app.module.ts实现的,所以我已经拥有应用程序启动时的凭据。

providers: [
    ...,
    {
      provide: APP_INITIALIZER,
      useFactory: Utilitys.authServiceFactory,
      deps: [AuthenticationService],
      multi: true   
    }]

这工作正常。但我的问题是:我是否需要拨打额外的电话,或者是否有办法从浏览器请求获得响应?

如果是:怎么可能?

如果否:APP_INITIALIZER是否只是一次获取数据的推荐方法?或者我应该使用执行HTTP调用的route guard保护所有路由?

angular kerberos angular-route-guards
2个回答
3
投票

要仅在应用程序启动后获取数据,您也可以使用Route Guards执行此操作。

您可以定义受路由保护保护的无组件路由,如下所示:

// Route Guard
canActivate(): boolean | Promise<boolean> | Observable<boolean> {
    if (this.yourService.isAuthenticated()) {
      return true;
    }
    return this.loginService.login();
}

// Routes
{
    path: '',
    canActivate: [AuthGuard],
    children: [
      { path: 'comp1', component: Comp1 },
      { path: 'comp2', component: Comp2 },
      ...
    ]
}

这样,每条路线都受到警卫的保护,您可以检查您的用户是否已登录/验证以访问您的应用程序。

请注意,您的常规组件将是无组件保护路由的子组件。


0
投票

经过更多的研究,我没有找到一个解决方案来获取用户信息,而无需额外的http调用服务器。

APP_INITIALIZR在我的初始用例中运行良好。但后来我的AuthenticationService正在扩展,并且APP_INITIALIZR无法处理由于循环依赖而需要注入路由器的服务。因此,我在接受的答案中推荐解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.