背景
我有一个 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 开发人员,但我使用此模型在 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
和“值”。