保存 keycloak 用户的自定义属性时出现问题

问题描述 投票:0回答:1

背景
我有一个 php 网站。 Keycloak用于身份验证。这部分工作正常。 我现在尝试通过其 REST API 直接将用户相关状态保存到 keycloak(不需要另一个用户数据库)。

问题
当我尝试执行请求时

PUT /admin/realms/{realm}/users/{user-id}
(来自rest-api文档)我得到

{
  "error":"unknown_error", 
  "error_description":"For more on this error consult the server log at the debug level."
}

Keycloak 日志

com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'attributes': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')

为了构建 PUT 请求,我使用 PHP curl。我对 CURLOPT_POSTFIELDS 的价值是

json_encode([
    "attributes" => [
        "test" => ["foo"]
    ]
])

生成以下请求正文

{"attributes":{"test":["foo"]}}
。这应该是一个 UserRepresentation(来自文档)

不幸的是,我在文档或 keycloak 日志中找不到任何其他关于我做错了什么的提示。 有什么想法吗?

php keycloak php-curl keycloak-rest-api
1个回答
0
投票

我不是 PHP 开发人员,但我使用此模型在 Java 项目中取得了相同的结果。

public class KeycloakUser {

  private String id;
  private String username;

  private String email;

  private boolean enabled;

  private String firstName;

  private String lastName;

  private boolean emailVerified;

  private Map<String, String> attributes;

  private List<Credential> credentials;

  private List<String> requiredActions;
}

从你的 JSON 编码来看,你可以尝试这个

{"attributes":{"test":"foo"}}
。将属性的值设为字符串的字典/映射,分别作为
keys
和“值”。

© www.soinside.com 2019 - 2024. All rights reserved.