尝试通过 kcadm.sh 创建 oidc-full-name-mapper 时出现“500 Internal Server Error”

Getting "500 Internal Server Error" when trying to create oidc-full-name-mapper via kcadm.sh

我正在使用 Keycloak kcadm.sh 工具来定义客户端。我现在正在尝试定义类似于 Keycloak 的 Web 界面可以定义的协议映射器。以下命令执行成功:

./kcadm.sh 创建 clients/myclientid/protocol-mappers/models -r myrealm -s name="full name" -s protocolMapper=oidc-full-name-mapper -s protocol=openid-connect

但是,当我检查创建的全名映射器时,我发现它是在 "Add to ID token" - OFF 和 "Add to access token" - OFF 的情况下创建的。我想让他们开。因此,在删除创建的映射器后,我尝试将 -s config.access.token.claim=true -s config.id.token.claim=true 添加到上述命令中。所以命令变成:

./kcadm.sh 创建 clients/myclientid/protocol-mappers/models -r myrealm -s name="full name" -s protocolMapper=oidc-full-name-mapper -s protocol=openid-connect -s config.access.token.claim=true -s config.id.token.claim=true

但这会导致 "HTTP error - 500 Internal Server Error"

我尝试创建一个像以前一样关闭选项的映射器,然后使用 Web 界面将它们设置为开启,然后导出客户端并检查结果。生成的 json 包括我的客户端的以下协议映射器:

"protocolMappers": [
    {
      "id": "...",
      "name": "full name",
      "protocol": "openid-connect",
      "protocolMapper": "oidc-full-name-mapper",
      "consentRequired": false,
      "config": {
        "id.token.claim": "true",
        "access.token.claim": "true"
      }
    }
  ],

看来我给的路径是对的。知道我做错了什么吗?

找到了!在 Linux 上,我必须在配置后使用 \"。因此命令变为: ./kcadm.sh create clients/myclientid/protocol-mappers/models -r myrealm -s name="full name" -s protocolMapper=oidc-full-name-mapper -s protocol=openid-connect -s config.\"access.token.claim\"=true -s config.\"id.token.claim\"=true

JustinT(https://whosebug.com/users/1717360/justint)对 给了我方向

像这样在 Linux 中指定配置值:

-s 'config."id.token.claim"=true'
-s 'config."access.token.claim"=true'