具有多个值的 Keycloak 用户属性(列表)

Juk*_*nen 9 customization keycloak

我有一个 Keycloak 用例,其中单个用户可能有多个客户号码。这些客户号码需要发送给服务提供商/客户,并且管理员也可以轻松更新。一些用户可能有数百个客户号码。目前我正在使用名为“customerNumbers”的单个用户属性,其中客户编号用逗号分隔,但我想:

  1. 为管理员提供在其自己的字段中查看每个客户编号的可能性
  2. 将客户编号作为 JSON 数组而不是逗号分隔的声明发送

所以代替这个: 在此输入图像描述

我想要这样的东西:

在此输入图像描述

而不是这个

"customers": {
"customerNumbers": "140661,140662"
},
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

"customers": [
    {"customerNumber": "140661"},
    {"customerNumber": "140662"}
],
Run Code Online (Sandbox Code Playgroud)

面对这种情况,应该如何应对呢?

小智 18

Keyclaok 使用自定义格式通过用 ## 分隔多个值来在同一字段中保存多个值

key: customerNumbers      value: 140661##140662
Run Code Online (Sandbox Code Playgroud)

如果您想在 jwt 访问令牌上显示该字段,您可以通过创建client scope -> protocol mapper (user attribute)自定义属性来实现,并确保设置多值

在协议映射器上设置自定义属性:

在协议映射器上设置自定义属性

之后,您可以将这些映射器添加到您的客户端,以便它将显示在您的访问令牌上

在 jwt 令牌上设置自定义属性:

在 jwt 令牌上设置自定义属性


小智 2

您需要像这样在用户属性中添加您的值 [{"customerNumber": "140661"}, {"customerNumber": "140662"}]

IE[Keycloak user management, attributes tab][1]

你的客户端映射器需要像这样(我想我尝试了所有其他选项)

在此输入图像描述