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

Docker环境Keycloak对接Spring微服务报Invalid token issuer 401错误

问题根因

401报错的核心原因是令牌签发者(iss)字段校验不通过,本质是Docker网络隔离导致不同角色访问Keycloak的地址不统一:

  • 容器内的Spring服务通过Docker内部DNS访问Keycloak,配置的访问地址是http://keycloak:8080,默认配置下适配器会从这个地址推导预期的iss值为http://keycloak:8080/realms/bingo
  • 浏览器端的React前端通过宿主机端口映射访问Keycloak,配置的地址是http://localhost:8090,Keycloak收到前端的令牌请求时,会直接把请求携带的Host地址作为iss值写入令牌,最终生成的token里iss字段为http://localhost:8090/realms/bingo
    两个值不匹配,验签直接失败返回401。
解决方案

以下三种方案按需选择即可:

方案1:直接指定后端验签的issuer(本地开发最快生效)

不需要修改Keycloak、前端和网络配置,只需要在Spring服务的application.properties中新增一行配置,明确告诉适配器验签时使用的issuer值,不需要从auth-server-url自动推导:

keycloak.token-issuer=http://localhost:8090/realms/bingo

原有keycloak.auth-server-url=http://keycloak:8080配置保留即可,这个地址只用于Spring后端和Keycloak做后台通信(比如拉取公钥做验签),容器内部网络可以正常访问,不会受影响。

方案2:固定Keycloak的iss签发规则(生产环境推荐)

修改Keycloak的docker-compose配置,在environment段新增3个配置,固定Keycloak签发令牌时使用的iss值,同时放开后端服务内部调用的域名校验:

keycloak:
  container_name: 'keycloak'
  image: quay.io/keycloak/keycloak:18.0
  environment:
    # 原有环境变量保持不变,新增以下配置
    KC_HOSTNAME: localhost
    KC_HOSTNAME_PORT: 8090
    KC_HOSTNAME_STRICT_BACKCHANNEL: "false"
  # 其余ports、depends_on等配置保持不变

配置完成后重启Keycloak容器,不管请求是从Docker内部还是外部进来,Keycloak签发的所有token的iss字段都会固定为http://localhost:8090/realms/bingo,和前端访问地址保持一致。
如果是生产环境部署,只需要把KC_HOSTNAME换成你实际分配给Keycloak的公网域名,前后端所有服务统一用这个域名访问Keycloak,就不会再出现地址不匹配的问题。

方案3:统一前后端访问Keycloak的入口

如果是本地调试场景,也可以让容器内的Spring服务直接通过宿主机端口访问Keycloak,保证两个服务访问Keycloak的地址完全一致:

  1. 修改Spring服务的docker-compose配置,新增extra_hosts配置(Linux环境需要额外加启动参数支持host.docker.internal域名):
spring-service: # 替换成你自己的Spring服务名
  # 其余配置保持不变
  extra_hosts:
    - "host.docker.internal:host-gateway"
  1. 把Spring配置里的keycloak.auth-server-url改成http://host.docker.internal:8090
    重启Spring容器后,前后端访问Keycloak的地址最终都会落到宿主机的8090端口,Keycloak收到的请求Host统一,签发的iss值自然和后端预期一致。
避坑提示
  • 不要把前端keycloak.json里的auth-server-url改成http://keycloak:8080,这个是Docker内部域名,浏览器无法解析,会直接导致前端连不上Keycloak
  • 不要为了省事直接关闭令牌iss校验,会带来伪造令牌的安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:48:27