typescript 默认情况下,Angular-Keycloak不会将不记名令牌添加到我的http请求中

gtlvzcf8  于 2022-11-18  发布在  TypeScript
关注(0)|答案(2)|浏览(97)

我试图实现keycloak-angular,但是我不能在我的http请求中默认添加不记名令牌。
“角形密钥罩”:“9.1.0”“密钥隐藏-js”:“16.0.0”“Angular ”:“第13.0.2条”

function initializeKeycloak(keycloak: KeycloakService) {
  return async () =>
   await keycloak.init({
      config: {
        url: 'https://127.0.0.1:8443/auth',
        realm: '*****',
        clientId: '****',
      },
      initOptions: {
        onLoad: 'login-required',
        checkLoginIframe: false,
      },
      loadUserProfileAtStartUp: true,
      enableBearerInterceptor: true,
      bearerExcludedUrls: [],
      bearerPrefix:'Bearer '
    });
}


 @NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    CoreModule,
    BrowserModule,
    KeycloakAngularModule,
    AppRoutingModule
  ],
  providers: [
    { provide: LOCALE_ID, useValue: 'it' },
    {
      provide: APP_INITIALIZER,
      useFactory: initializeKeycloak, 
      multi: true,
      deps: [KeycloakService]
    },
  ],
  bootstrap: [AppComponent]
})
ia2d9nvy

ia2d9nvy1#

您必须使用HttpInterceptor在每个API调用处添加自定义头。

providers: [
 {
   provide: HTTP_INTERCEPTORS,
   useClass: ApiInterceptor,
   multi: true,
 }
],

实现拦截功能:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  request = request.clone({
    setHeaders: {
      Authorization: `Bearer #YOUR_TOKEN_HERE#`
    }
  });

  return next.handle(request);
}
2q5ifsrm

2q5ifsrm2#

在我的例子中,没有使用HttpClient来执行请求。
相反,fetch已被直接使用,并且未被angular拦截。
因此,如果HttpInterceptor已经就位,但它不起作用,请确保使用HttpClient来处理请求。
我将fetch(...)更改为http.get(...),并且成功了

相关问题