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

能否在Keycloak签发的JWT令牌中存储自定义信息?

Keycloak JWT添加自定义字段实现方法

完全可以在Keycloak签发的JWT令牌中加入自定义字段,不需要额外查询数据库,根据你的场景选下面两种实现方式即可。


零代码实现:用户属性+内置协议映射器

适合存储用户居住地址这类固定的用户属性,不需要写任何代码,控制台配置完就能用:

  • 配置用户自定义属性
    进入对应Realm的管理控制台,打开「Users」菜单找到目标用户,切换到「Attributes」页签,新增属性:Key填address,Value填用户的实际居住地址,保存即可。
  • 配置令牌Claim映射
    • 打开「Clients」菜单,选中你当前使用的客户端(即你解码出的token里azp字段对应的MyProject)
    • 切换到「Client Scopes」页签,点击该客户端对应的专用scope(命名规则一般为[客户端ID]-dedicated)
    • 点击「Add Mapper」→「By Configuration」,选择「User Attribute」类型的映射器
    • 按提示填配置项:
      • Name:自定义即可,比如用户居住地址映射
      • User Attribute:填刚才给用户加的属性Key,即address
      • Token Claim Name:填你希望在JWT payload里显示的字段名,比如直接填address
      • Claim JSON Type:字符串类型选String即可,如果是结构化地址(省/市/区/街道拆分)选JSON
      • 打开「Add to access token」开关,如果需要同时把字段加到ID Token、UserInfo接口响应里,对应打开其他开关即可
  • 保存配置后,重新走登录流程获取新的access_token,解码后就能看到自定义的地址字段了。

复杂场景实现:自定义协议映射器

如果要加的字段不是简单存储的用户属性,需要做逻辑计算、关联多份数据生成(比如用户的动态权限集合、多端关联信息),可以用Keycloak的SPI能力实现自定义映射器:

  • 按照Keycloak的SPI规范实现OIDCProtocolMapper接口,在实现类里写自定义字段的生成逻辑,不管是查Keycloak内置存储还是关联外部数据源都可以
  • 把实现好的代码打包为jar包,放到Keycloak部署目录的providers文件夹下,重启Keycloak完成加载
  • 后续配置流程和上面的内置映射器一致,添加Mapper时可以直接选到你自定义的实现,配置后签发的token就会自动带上你生成的自定义字段。

注意事项:JWT仅做Base64编码,没有加密能力,绝对不要在令牌中存储敏感信息,任何拿到token的人都可以直接解码看到所有内容。另外不要在token里塞体积过大的内容,否则会导致请求头超出大小限制,拖慢接口传输性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:51:22