如何在Keycloak生成的JWT中包含用户配置文件自定义属性
解决自定义用户属性无法写入JWT的问题
先排查映射器类型是否选错
你之前提到用了“映射角色的方式”,大概率是选错了映射器类型。正确的做法是创建User Attribute类型的映射器,步骤如下:
- 进入目标客户端的「Client Scopes」,找到你的专属作用域,打开「Mappers」标签页
- 点击「Create」,选择「User Attribute」类型
- 配置项注意:
- User Attribute:必须和你在Realm Settings -> User Profile里定义的属性名大小写完全一致(比如
Department) - Token Claim Name:填JWT里要显示的字段名(比如
department) - 勾选「Add to ID token」和「Add to access token」
- Claim JSON Type根据属性类型选(比如字符串就选
String)
- User Attribute:必须和你在Realm Settings -> User Profile里定义的属性名大小写完全一致(比如
确认作用域已关联客户端
- 回到客户端的「Client Scopes」标签页,检查你的专属作用域是否在「Assigned Default Client Scopes」列表里
- 如果是放在「Assigned Optional Client Scopes」,登录时必须在请求参数里加上
scope=openid 你的作用域名,否则不会触发这个作用域的映射
检查用户属性是否有实际值
- 去「Users」找到测试用户,进入「Attributes」标签页,确认
Department、Region、OfficeId这几个属性已经填了具体内容——空属性不会被写入JWT
重新获取token验证
- 登出后重新登录拿新的token,用解码工具查看内容,确认自定义字段是否存在
- 如果还是没有,检查客户端「Settings」里的「Access Token Lifespan」,避免用了过期的旧token
内容的提问来源于stack exchange,提问作者snappymcsnap
相关产品推荐
相关产品推荐

