Keycloak 26.1.2如何在组织声明中添加用户属性?
在Keycloak的Token组织声明中添加用户属性的实现方法
直接设置organization.department作为声明名无效,是因为Keycloak默认映射器不支持直接给嵌套对象的属性赋值,可通过以下两种方式实现:
方法一:使用Script Mapper(推荐,灵活适配嵌套结构)
- 登录Keycloak控制台,进入目标客户端,切换到「Mappers」标签页,点击「Create」。
- 选择Mapper Type为「Script Mapper」,设置参数:
- Name:自定义名称(如
Organization with Department) - Token Claim Name:
organization - Claim JSON Type:
Object
- Name:自定义名称(如
- 在「Script」编辑框中编写脚本,构建嵌套的组织对象:
var orgObj = {}; var orgaDetail = {}; // 获取用户关联的组织ID(根据实际存储位置调整,比如用户属性、组属性) orgaDetail.id = user.getFirstAttribute('organization_id'); // 获取用户的department属性 orgaDetail.department = user.getFirstAttribute('department'); orgObj.orga = orgaDetail; return orgObj; - 保存映射器后,删除或禁用原来自动生成organization声明的映射器,避免重复冲突。
方法二:使用User Attribute Mapper(仅部分Keycloak新版本支持)
- 在客户端「Mappers」页面创建新映射器,选择Mapper Type为「User Attribute」。
- 设置参数:
- Attribute Name:用户属性名称(如
department) - Token Claim Name:
organization.orga.department - Claim JSON Type:
String
- Attribute Name:用户属性名称(如
- 保存后测试Token,若嵌套路径不生效,说明版本不支持,建议改用方法一。
注意事项
- 确保用户的
department属性已在Keycloak用户管理界面正确添加并赋值。 - 生成Token后,用JWT解析工具验证结构是否符合预期。
内容的提问来源于stack exchange,提问作者Revanth Shalon
相关产品推荐
相关产品推荐

