Anderstand如何初始化keycloak-angular服务? (bearerExcludedUrls等)

时间:2019-11-30 11:51:53

标签: angular angular-routing keycloak keycloak-services

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

问题

我设法通过我的角度应用程序配置了身份验证。因此,每次我在没有授权标头的情况下进入应用程序时,都会被重定向到keycloak登录页面。

如果我希望未登录的人访问公共页面(例如“ / public / city”)而不重定向到密钥库登录页面,我应该使用“ bearerExcludedUrIs”吗?如果是这样,我应该穿什么?如果没有,如何进行?

从更一般的角度来看,提供的服务中的keycloak初始化函数具有initOption部分。我不完全了解其所有属性的含义(onLoad,令牌,refreshToken,idToken,timeSkew,sheckLoginIframe,checkLoginIframeInterval,responseMode,流)。如果一个愿意与我分享知识的开明人士能启发我,我将不胜感激...

我的代码

我正在使用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 examples
A topic that raises a similar error with version 4.0.0 of the keycloak-service

2 个答案:

答案 0 :(得分:0)

我已经与钥匙斗篷战斗了两个星期,我相信我有类似的问题。我试过的是注释keycloak初始化选项“ onLoad:'需要登录'”。 之后,当我尝试输入受AuthGuard保护的网址时,只需登录。对我来说,如果未注释掉“需要登录”,则“ bearerExcludedUrls”不起作用。

答案 1 :(得分:0)

对于bearerExcludedUrls,以下代码对我有用:

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