【问题标题】:Angular get data from kerberos authenticationAngular 从 kerberos 身份验证中获取数据
【发布时间】:2018-08-06 18:52:19
【问题描述】:

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

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

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

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

如果是:怎么可能?

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

【问题讨论】:

    标签: angular kerberos angular-route-guards


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      要仅在您的应用程序启动后获取数据,您也可以使用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 },
            ...
          ]
      }
      

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2017-03-17
        • 2022-06-13
        • 1970-01-01
        • 2017-06-28
        相关资源
        最近更新 更多