Keycloak 映射多个用户属性

ben*_*ist 3 keycloak

我已经按照 [1] 中的指南来映射单个用户属性。但是,我需要将所有属性映射到一个数组,以便特定用户的每个属性都显示在访问令牌的属性数组中(或者更好的是,将属性限制为特定的一组属性,但我猜用户属性只是平面键/值映射)。

我尝试在客户端映射器的用户属性字段中设置通配符 *。但是无论我做什么,给定用户属性映射的实际属性键,我都可以一次设置一个属性。

[1] Keycloak 检索自定义属性到 KeycloakPrincipal

小智 10

我遇到了同样的问题。

我尝试了以下方法:

  1. 添加了一个具有单个值的键“部门”,例如“财务”。添加具有另一个值“development”的第二个键“department”会覆盖初始条目。
  2. 我也尝试将类似列表的内容放入值列,例如“发展、金融”或“发展;金融”,但这也被视为单个值。

如果您在管理控制台中使用“development##finance”,则用户将具有“department”属性,其中包含 2 个值“development”和“finance”。

“##”似乎是要使用的分隔符。

因此,如果您在 protocolMapper 中为“department”属性标记“multivalued”开关,则 accessToken 将包含具有 2 个值“development”和“finance”的列表。

"部门": [ "开发", "财务" ]

这对我有用。

KeyCloak 版本 11.0.2


小智 -1

您可以编写自己的 Keycloak 扩展。一种解决方案是编写自定义身份验证器,您可以:过滤用户属性 -> 加入属性值 -> 将结果 JSON 数组写入用户会话注释。

然后添加客户端映射器,将该会话注释映射到单个声明中。