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,要改成固定值,按以下步骤操作:
- 登录Keycloak后台,找到你用password模式请求的目标客户端
- 切换到Client Scopes标签,添加默认的
audience客户端作用域(如果没有,先去Client Scopes页面创建一个) - 进入这个
audience作用域的Mappers标签,点击「Create」新建映射器:- 类型选Audience
- 名称随便填(比如「固定Audience」)
- 在「Included Client Audience」里选择你的客户端名称,或者直接输入你想要的固定字符串(比如你的应用名称)
- 勾选「Add to access token」
- 保存后,再获取Token,
aud字段就会变成你设置的固定值,集群环境下不管节点怎么变都不会影响。
内容的提问来源于stack exchange,提问作者Nevo
相关产品推荐
相关产品推荐

