明白如何初始化keycloak-angular服务?(bearerExcludedUrls 等...)

Ugo*_*ola 5 angular-routing keycloak keycloak-services angular

我正在使用 Angular 8.0.3、keycloak 8.0.0 和keycloak-service 7.0.1

问题

我设法从我的 angular 应用程序配置了身份验证。所以每次我在没有授权标头的情况下继续我的应用程序时,我都会被重定向到 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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


下面,我已经访问过的几个链接

keycloak-angular github 示例
一个在 keycloak-service 4.0.0 版中引发类似错误的主题

小智 1

我已经和 keycloak 斗争了两周了,我相信我也遇到了类似的问题。我尝试的是注释 keycloak init 选项“onLoad: 'login-required'”。之后,我只需在尝试输入受 AuthGuard 保护的 url 时登录即可。对我来说,如果未注释掉“需要登录”,则“bearerExcludedUrls”不起作用。