Jenkins集成Keycloak插件遇无限循环及令牌无受众问题求助
问题分析与解决方案
核心问题定位
日志中的org.keycloak.common.VerificationException: No audience in the token明确指出:Keycloak颁发的JWT令牌中缺少audience(aud)字段,而你的Jenkins配置里开启了verify-token-audience: true,导致令牌验证失败,进而引发登录无限循环(验证失败→重定向登录→再次验证失败)。
排查思路
- 确认Keycloak客户端是否配置了生成aud字段的规则
- 解析实际获取的JWT令牌,检查是否包含
aud字段(可使用jwt.io工具解析) - 核对Jenkins配置中的
resource值与Keycloak客户端的Client ID是否完全一致(大小写敏感) - 检查Keycloak领域的Token全局设置,是否覆盖了客户端的audience配置
解决方案
方案1:配置Keycloak客户端生成aud字段
- 登录Keycloak控制台,进入你的
Prod领域,找到Jenkins客户端 - 在Settings标签页:
- 确认Access Type设置为
confidential(与你配置中的credentials.secret对应) - 滚动到Advanced Settings,开启Include Client Audience选项(不同Keycloak版本位置可能略有差异)
- 确认Access Type设置为
- 在Client Scopes标签页:
- 找到
audience系统内置客户端范围,将其添加到该客户端的Assigned Default Client Scopes列表中
- 找到
- (可选)如果上述步骤无效,添加自定义Audience映射器:
- 切换到Mappers标签页,点击Create
- 填写参数:
Mapper Type: Audience Name: Jenkins-Audience Included Client Audience: Jenkins(你的客户端ID) Add to access token: 勾选 - 保存后重新测试登录
方案2:核对Jenkins配置一致性
确保导入的Keycloak配置JSON中:
resource的值与Keycloak客户端的Client ID完全一致(大小写、拼写必须完全匹配)- 若使用Keycloak新版本,确认
auth-server-url的路径是否正确(新版本Keycloak移除了/auth后缀,若你的Keycloak版本是17+,需改为https://login.****.org/)
临时排查方案(不推荐生产环境)
若需快速验证问题根源,可临时将Jenkins配置中的verify-token-audience改为false,重新启动Jenkins后测试登录。若能正常登录,说明问题确实出在audience字段缺失上,再按方案1修复后改回true。
内容的提问来源于stack exchange,提问作者Delaram Hamraz
相关产品推荐
相关产品推荐

