如何通过 Keycloak REST API 更新自定义属性

kvi*_*liy 9 keycloak keycloak-rest-api

是否可以通过 Keycloak REST API 更新自定义属性的值?例如,要使用哪个端点以及如何为此处创建的属性构造请求正文。

谢谢!

srp*_*srp 7

您必须使用Keycloak Admin REST API

{host}/{basepath}/admin/realms/{realm}/users/{id}

例如 http://localhost:8080/auth/admin/realms/alumni-realm/users/cd57cfd8-cb1c-4025-abfd-67fe6b784d22

请求正文(JSON):

{
    "attributes": {
        "DOB": "1984-07-01"
    }
}
Run Code Online (Sandbox Code Playgroud)

授权(不记名令牌):

  1. 使用Admin useraccess_token 进行授权。

  2. 如果您想允许User更新他们自己的个人资料,那么您必须manage-users在 Keycloak 中授予角色。(该用户将能够更新其他用户的信息,因此不推荐)

  • 我测试了这个解决方案并且它有效。有点儿。它有一个令我困扰的重大缺陷。您实际上是用新属性覆盖了所有现有属性。有没有办法只创建或更新单个属性?我在文档中找不到任何内容,而且我不太喜欢为此提出 2 个请求 (3认同)
  • 如果您在属性映射(从 GET 调用的响应中获得)的末尾添加要创建或更新的属性,如果添加的属性已存在,Keycloak 将考虑新值,否则只会添加它。这不会阻止您执行 2 次调用,但会简化您将放入 PUT 调用中的属性集合的构造。{ "attributes": { "broker": "12345678", "lang": "FR", "lang": "EN" } } --> 属性 lang 末尾将具有“EN”值。 (2认同)

小智 2

您可以使用 API 进行用户更新,仅发送要更改的属性:

PUT ../realms/{realm}/users/{userID} 主体:

{
    "attributes": {
        "myAttribute": [
            "NewValue"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)