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

Posted

技术标签:

【中文标题】Andersstand 如何初始化 keycloak-angular 服务? (bearerExcludedUrls 等...)【英文标题】:Anderstand how to initialize the keycloak-angular service ? (bearerExcludedUrls, etc...) 【发布时间】:2020-03-25 16:57:12 【问题描述】:

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

【问题讨论】:

bearerExcludedUrls 用于 HttpClient 排除访问令牌传输。检查keycloak-service 文档中的身份验证保护。 如果我想让未登录的人访问公共页面(例如'/public/cities')而不重定向到 keycloak 登录页面,我应该使用'bearerExcludedUrIs'吗?如果是这样,我应该穿什么?如果没有,如何进行?我已经实现并使用了 keycloak 服务保护。后者检查用户是否连接良好,并在访问 url 之前检查他的角色。 我正在为同样的问题而苦苦挣扎。我尝试使用初始化函数,它也允许定义一个 BearerExcludedUrls。也不适合我... 【参考方案1】:

对于 BearerExcludedUrls,下面的代码对我有用:

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

【讨论】:

【参考方案2】:

我已经与 keycloak 斗争了两个星期,我相信我遇到了类似的问题。我尝试的是评论 keycloak 初始化选项“onLoad:'login-required'”。 之后,我只需要在尝试输入受 AuthGuard 保护的 url 时登录。对我来说,如果“需要登录”没有被注释掉,“bearerExcludedUrls”就不起作用。

【讨论】:

以上是关于Andersstand 如何初始化 keycloak-angular 服务? (bearerExcludedUrls 等...)的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot REST API 仅接受来自 Angular 前端的调用

Vaadin 8(没有 Spring Boot/Security)和 Keycloak 不起作用

Keycloak - 是不是可以在领域之间共享一组共同的用户?

Grails、Spring Security 和 Keycloak:表单以 ISO-8859-1 而不是 UTF-8 提交

如何将BYTE数组初始化

C++ 结构体如何初始化