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

如何在Micronaut GraphQL中使用Keycloak JWT实现身份认证

排查思路
  • 先校验JWT本身的合法性,解码你测试用的JWT,确认以下字段符合预期:
    • exp(过期时间)大于当前时间戳,nbf(生效时间)小于当前时间戳,排除令牌过期/未生效的问题
    • iss(签发方)和你Keycloak对应realm的地址完全一致,注意结尾斜杠、大小写、IP/域名匹配等细节,只要有一个字符不匹配就会校验失败
    • aud(受众)字段包含你配置的客户端ID myapp-backend,如果没有的话可以先在配置中添加micronaut.security.token.jwt.claims-validators.audience-enabled: false关闭受众校验做测试,后续再去Keycloak客户端配置中补全访问令牌受众配置
  • 检查项目依赖是否完整,确认已引入Micronaut 3对应的JWT和OAuth2核心依赖:micronaut-security-jwt、micronaut-security-oauth2,缺少对应依赖会导致令牌校验逻辑未生效直接返回401
  • 补充配置JWT签发方校验,避免隐式的iss不匹配问题,修改application.yml添加如下配置:
micronaut:
  security:
    token:
      jwt:
        claims-validators:
          issuer: http://xx.xx.xx.xx:8090/auth/realms/myrealm
  • 检查网络连通性,确认Micronaut服务所在的服务器可以正常访问配置的Keycloak JWKS地址(http://xx.xx.xx.xx:8090/auth/realms/myrealm/protocol/openid-connect/certs),无法获取公钥会直接导致签名校验失败
  • 调整日志配置输出安全模块完整日志,只开全局TRACE不会输出安全模块的细节日志,添加如下日志配置后重新发起请求,可看到明确的校验失败原因:
logger:
  levels:
    io.micronaut.security: TRACE
    io.micronaut.security.token.jwt: TRACE
如需进一步定位可补充以下信息
  • 解码后的JWT payload内容(隐去敏感信息)
  • 开启安全模块TRACE日志后,单次请求对应的完整服务端日志
  • 项目构建文件(pom.xml/build.gradle)中所有micronaut-security相关的依赖配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:03