Angular получить данные из аутентификации Kerberos

У меня есть угловое приложение с бэкэндом. Проверка подлинности выполняется браузером Kerberos до запуска приложения. Ответ содержит JWT с ролями в нем.

Мой подход - дополнительный HTTP-вызов к серверу, когда приложение начинает получать учетные данные пользователей. Это реализуется с APP_INITIALIZER в app.module.ts, так что у меня уже есть учетные данные, когда приложение запустилось.

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

Это работает нормально. Но мой вопрос: мне нужно сделать дополнительный звонок или есть ли способ получить ответ на запрос браузера?

Если да: как это возможно?

Если нет: APP_INITIALIZER рекомендуемый способ получить данные только один раз? Или я должен защитить все маршруты с route guard что вызывает HTTP?

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 },
      ...
    ]
}

Таким образом, каждый маршрут защищен вашей охраной, и вы можете проверить, авторизован ли ваш пользователь для доступа к вашему приложению.

Обратите внимание, что ваши обычные компоненты будут дочерними для некомпонентного защищенного маршрута.

После дополнительных исследований я не нашел решения для получения информации о пользователях без дополнительного http-вызова на сервер.

APP_INITIALIZR отлично работал для моего первоначального варианта использования. Но позже мой AuthenticationService расширялись и APP_INITIALIZR не может обрабатывать сервисы, которым нужно внедрить маршрутизатор из-за циклической зависимости. Поэтому я рекомендую найти лучший способ, чем использовать APP_INITIALIZR получить первоначальную информацию о пользователе.

Другие вопросы по тегам