代码之家  ›  专栏  ›  技术社区  ›  ochs.tobi

角度从kerberos身份验证获取数据

  •  3
  • ochs.tobi  · 技术社区  · 7 年前

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

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

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

    这很好用。 但我的问题是: 我是否必须打一个额外的电话,或者是否有办法从浏览器请求中获得响应?

    如果是: 怎么可能呢?

    如果否: APP\U初始值设定项 建议只提取一次数据的方法?或者我应该用 route guard HTTP调用的是什么?

    2 回复  |  直到 7 年前
        1
  •  3
  •   user9740688 user9740688    7 年前

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

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

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

        2
  •  0
  •   ochs.tobi    6 年前

    经过更多的研究,我还没有找到一种不用额外的http调用服务器就能获取用户信息的解决方案。

    这个 APP_INITIALIZR 在我的初始用例中运行良好。但后来我 AuthenticationService 正在扩张 APP\U初始化器 由于循环依赖关系,无法处理需要注入路由器的服务。因此,我推荐公认答案中的解决方案。