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

Spring Boot集成Keycloak JWT认证返回401 提示iss claim无效

问题根因

返回Bearer error="invalid_token", error_description="The iss claim is not valid"是典型的JWT签发方校验不通过错误,核心原因是Spring Boot资源服务器配置的issuer-uri值,和Keycloak实际签发到JWT里的iss字段值不匹配,和接口权限逻辑、Token获取流程无关。
你当前配置存在两处明确错误:

  1. spring.security.oauth2.resourceserver.jwt.issuer-uri配置值末尾多了一个斜杠,Keycloak为demo领域签发的JWT中,iss字段固定值为http://localhost:8080/realms/demo,不带末尾斜杠,多一个字符就会触发严格字符串匹配校验失败。
  2. 自定义的keycloak.auth-server-url配置值错误,填成了领域账户控制台的地址http://localhost:8080/realms/demo/account,该配置项的正确值为Keycloak服务的根访问地址。
修复步骤
  • 修正application.yaml配置项,调整后内容如下:
keycloak:
  realm: demo
  resource: spa-demo
  # 修正为Keycloak服务根地址,移除错误的路径后缀
  auth-server-url: http://localhost:8080
spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          jwk-set-uri: http://localhost:8080/realms/demo/protocol/openid-connect/certs
          # 移除issuer-uri末尾的斜杠,和JWT实际iss值完全匹配
          issuer-uri: http://localhost:8080/realms/demo
  • 重启Spring Boot服务后,重新从Keycloak获取Token再发起请求即可。
  • 若修改后仍报错,可将Postman获取到的Bearer Token做Base64解码,查看Payload段的iss字段实际值,保证配置的issuer-uri和该值完全一致(无端口、域名、路径字符差异)即可。你当前用kc.bat start-dev本地开发模式启动Keycloak,默认签发的Token iss值就是上述修正后的值,不需要额外调整Keycloak启动参数。
其他配置提示
  • 你当前在SecurityConfiguration中将/genere/**、/valutazione/**、/users/**、/carrello/**、/film/**路径全部设置为permitAll,访问根路径/会走JWT认证逻辑,符合当前报错触发场景,路径权限规则不需要额外调整。
  • 等iss校验问题修复后,如果访问接口提示权限不足,注意Spring Security默认解析Keycloak JWT时,会给realm角色自动添加ROLE_前缀、给Scope自动添加SCOPE_前缀,你当前@PreAuthorize("hasAuthority('user')")的写法需要配合自定义权限映射才能生效,和当前iss报错无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:39:41