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

Keycloak:如何固定返回JWT Token的audience字段

解决Keycloak Token Audience问题的两种思路

一、快速适配go-jwt-middleware(不用改Keycloak)

既然你的代码不需要用到aud字段,有两种简便方式处理:

  • 直接硬编码期望的aud值,让中间件校验匹配:
    在初始化go-jwt-middleware时,指定Audience参数为你想要的固定字符串:
    middleware := jwtmiddleware.New(jwtmiddleware.Options{
        ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
            // 保留你原来获取公钥的逻辑
            return yourPublicKey, nil
        },
        Audience: []string{"your-fixed-audience"}, // 硬编码你需要的aud值
        SigningMethod: jwt.SigningMethodRS256,
    })
    
  • 完全跳过aud字段校验:
    如果连匹配都不需要,直接关闭aud校验逻辑:
    middleware := jwtmiddleware.New(jwtmiddleware.Options{
        ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
            return yourPublicKey, nil
        },
        ValidationOptions: &jwt.ValidationOptions{
            SkipAudienceCheck: true, // 跳过aud校验
        },
        SigningMethod: jwt.SigningMethodRS256,
    })
    

二、修改Keycloak配置,让Token返回固定Audience(集群友好)

Keycloak默认会把自身节点的主机名放进aud,要改成固定值,按以下步骤操作:

  1. 登录Keycloak后台,找到你用password模式请求的目标客户端
  2. 切换到Client Scopes标签,添加默认的audience客户端作用域(如果没有,先去Client Scopes页面创建一个)
  3. 进入这个audience作用域的Mappers标签,点击「Create」新建映射器:
    • 类型选Audience
    • 名称随便填(比如「固定Audience」)
    • 在「Included Client Audience」里选择你的客户端名称,或者直接输入你想要的固定字符串(比如你的应用名称)
    • 勾选「Add to access token」
  4. 保存后,再获取Token,aud字段就会变成你设置的固定值,集群环境下不管节点怎么变都不会影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:38:00