Как инициализировать сервис keycloak-angular? (bearerExcludedUrls и т. д.)

Я использую Angular 8.0.3, keycloak 8.0.0 и keycloak-service 7.0. .1

Проблема

Мне удалось настроить аутентификацию из моего углового приложения. Поэтому каждый раз, когда я захожу в свое приложение без заголовка авторизации, меня перенаправляют на страницу входа в систему keycloak.

Если я хочу, чтобы незарегистрированный человек получил доступ к общедоступной странице (например, «/public/cities») без перенаправления на страницу входа в систему с помощью keycloak, должен ли я использовать «bearerExcludedUrIs»? Если да, то что мне надеть? Если нет, то как поступить?

с более общей точки зрения, функция инициализации keycloak в предоставляемом сервисе имеет часть initOption. Я не совсем понимаю значение всех его атрибутов (onLoad, token, refreshToken, idToken, timeSkew, sheckLoginIframe, checkLoginIframeInterval, responseMode, flow). Если бы просветленный человек, желающий поделиться со мной своими знаниями, мог просветить меня, я был бы признателен...

Мой код

Я использую ngDoBootstrap для загрузки библиотеки и настройки keycloak-angular. В этом примере я попытался разрешить все URL-адреса с регулярным выражением /.*/ (но ничего не изменилось).


const keycloakService = new KeycloakService();

@NgModule({
  declarations: [
    AppComponent,
    HeaderComponent,
    LoginComponent
  ],
  imports: [
    KeycloakAngularModule,
    BrowserModule,
    AppRoutingModule,
    CoreModule,
    SharedModule,
    PagesModule
  ],
  providers: [
    {
      provide: KeycloakService,
      useValue: keycloakService,
    }
  ],
  entryComponents: [AppComponent]
})
export class AppModule implements DoBootstrap {
  async ngDoBootstrap(app) {
    const { keycloakConfig } = environment;

    try {
      keycloakService.init({
        config: keycloakConfig,
        initOptions: {
          onLoad: 'login-required',
          checkLoginIframe: false
        },
        enableBearerInterceptor: true,
        bearerExcludedUrls: ['.*']
      }).then(() => {
        app.bootstrap(AppComponent);
      });
    } catch (error) {
      console.error('Keycloak init failed', error);
    }
  }
}


ниже несколько ссылок, которые я уже посетил

примеры keycloak-angular github
Тема, в которой возникает аналогичная ошибка с версией 4.0.0 сервиса keycloak


person Ugo vla    schedule 30.11.2019    source источник
comment
BearerExcludedUrls предназначен для HttpClient, чтобы исключить передачу токена доступа. Проверьте защиту авторизации в keycloak-service документации.   -  person Vadim Ashikhman    schedule 02.12.2019
comment
Если я хочу, чтобы незарегистрированный человек получил доступ к общедоступной странице (например, «/public/cities») без перенаправления на страницу входа в систему с помощью keycloak, должен ли я использовать «bearerExcludedUrIs»? Если да, то что мне надеть? Если нет, то как поступить? Я уже реализовал и использовал сервисную защиту keycloak. Последний проверяет, хорошо ли подключен пользователь, и проверяет его роли перед доступом к URL-адресу.   -  person Ugo vla    schedule 02.12.2019
comment
Я борюсь с той же проблемой. Я попытался использовать функцию инициализации, которая также позволяет определить BearerExcludedUrls. У меня тоже не работает...   -  person John Student    schedule 16.01.2020


Ответы (2)


Я боролся с keycloak уже две недели, и я считаю, что у меня была похожая проблема. Что я пробовал, так это прокомментировать параметры инициализации keycloak «onLoad: «требуется вход в систему»». После этого мне нужно только войти в систему, когда я пытаюсь ввести URL-адрес, защищенный AuthGuard. Для меня «bearerExcludedUrls» не работал, если «требуемый вход» не закомментирован.

person Dainius Java    schedule 08.04.2020

Для BearerExcludedUrls у меня работал код ниже:

await keycloak.init({
  config: {
    url: 'url',
    realm: 'realm',
    clientId: 'clientId'
  },
  initOptions: {
    onLoad: 'check-sso',
    checkLoginIframe: false
  },
  bearerExcludedUrls: [
    'main$'
  ]
});
person user14520191    schedule 26.10.2020