You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用有效凭证访问Keycloak REST API返回403 Angular自定义请求头不生效问题

问题根因

你遇到的token覆盖问题是项目中配置了全局Keycloak权限拦截器,会自动为所有HTTP请求追加当前登录用户的Authorization请求头,且拦截器执行时机晚于你手动设置请求头的时机,导致手动设置的sample用户token被覆盖。


可行解决方法

你可以根据自己的项目情况任选以下方案:

方案1:修改拦截器逻辑,对指定请求跳过自动加token

找到项目中全局注册的Keycloak拦截器代码,新增跳过逻辑:

intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
  // 新增判断:请求头带跳过标记时,不自动注入token,删除标记后放行
  if (request.headers.has('Skip-Keycloak-Interceptor')) {
    const processedReq = request.clone({
      headers: request.headers.delete('Skip-Keycloak-Interceptor')
    });
    return next.handle(processedReq);
  }
  // 原有自动注入当前登录用户token的逻辑保留
  // ...
}

修改你调用角色接口的代码,加上跳过标记:

getKeycloakRoles(access_token){
  const url = 'http://keycloak-keycloak.router.default.svc.cluster.local........nip.io/auth/admin/realms/myRealm/roles'
  const authH = new HttpHeaders()
    .set('Authorization','Bearer ' + access_token)
    .set('Skip-Keycloak-Interceptor', 'true');
  return this.http.get(url,{headers:authH,observe:'response'});
}

方案2:将Keycloak admin接口加入官方库的自动排除列表

如果你使用的是keycloak-angular官方库,可以直接在初始化配置里添加路径排除规则,匹配到的路径不会被自动注入token:

KeycloakAngularModule.forRoot({
  config: {
    // 保留你原有的Keycloak服务地址、realm、client_id等配置
  },
  initOptions: {
    // 保留你原有的初始化参数
  },
  // 新增排除规则,匹配你要调用的admin接口路径
  bearerExcludedUrls: ['/auth/admin/realms/myRealm/roles']
})

方案3:绕开所有拦截器直接发起请求

如果不想修改全局配置,可以直接注入HttpBackend创建临时HTTP客户端,完全绕开拦截器链:

import { HttpBackend, HttpClient } from '@angular/common/http';

// 构造函数注入HttpBackend
constructor(private httpBackend: HttpBackend) {}

getKeycloakRoles(access_token){
  const url = 'http://keycloak-keycloak.router.default.svc.cluster.local........nip.io/auth/admin/realms/myRealm/roles'
  const authH = new HttpHeaders().set('Authorization','Bearer ' + access_token);
  // 创建临时HttpClient,不会经过任何拦截器
  const tempHttpClient = new HttpClient(this.httpBackend);
  return tempHttpClient.get(url,{headers:authH,observe:'response'});
}

安全提示

将管理员凭证硬编码在前端代码中存在极高安全风险,所有访问前端的用户都可以通过调试工具获取sample用户的账号密码和接口权限,建议将Keycloak admin接口的调用逻辑迁移到后端服务,前端仅调用你自己的后端接口获取角色数据,避免权限泄露。

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:24:02