Как обновить настраиваемый атрибут через Keycloak REST API

Можно ли обновить значение настраиваемого атрибута через Keycloak REST API? Например, какую конечную точку использовать и как создать тело запроса для атрибута, который был создан здесь.

Спасибо!


person kvitaliy    schedule 02.07.2020    source источник
comment
Это можно сделать через клиентскую java-библиотеку администратора Keycloak. Это то, что вы ищете?   -  person Sarang    schedule 03.07.2020
comment
@Sarang Не могли бы вы привести пример или ссылку?   -  person Kricket    schedule 14.09.2020


Ответы (3)


Вам необходимо использовать Keycloak Admin REST API:

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

e.g. http://localhost:8080/auth/admin/realms/alumni-realm/users/cd57cfd8-cb1c-4025-abfd-67fe6b784d22

Тело запроса (JSON):

{
    "attributes": {
        "DOB": "1984-07-01"
    }
}

Авторизация (токен на предъявителя):

  1. Используйте Admin user access_token для авторизации.

  2. Если вы хотите разрешить User обновлять свой профиль, вам необходимо предоставить manage-users роль в Keycloak. (Этот пользователь сможет обновлять информацию о других пользователях, поэтому это не рекомендуется)

person srp    schedule 01.04.2021
comment
Я протестировал это решение, и оно работает. Вроде. У него есть один серьезный недостаток, который меня беспокоит. Вы фактически заменяете все существующие атрибуты новыми. Есть ли способ просто создать или обновить один атрибут? Я ничего не нашел в документации, и я не большой поклонник делать 2 запроса на это - person Smerk; 22.06.2021
comment
На сегодняшний день я не вижу такого API, доступного для обновления только одного атрибута. Для обновления одного / нескольких атрибутов используйте полезную нагрузку, как показано ниже: {"attributes": { "attribute_1": "new value","attribute_2": "existing value"}} - person srp; 23.06.2021
comment
Если вы добавите атрибут, который хотите создать или обновить, в конце карты атрибутов (который вы получили в ответ на вызов GET), Keycloak будет учитывать новое значение, если добавленный атрибут уже существует, в противном случае он будет просто добавлен. Это не помешает вам выполнить 2 вызова, но упростит создание коллекции атрибутов, которую вы поместите в вызов PUT. {attributes: {broker: 12345678, lang: FR, lang: EN}} - ›в конце атрибута lang будет указано значение EN. - person Helali; 23.06.2021

Вы можете использовать API для обновления пользователя с отправкой только изменяемого атрибута:

PUT ../realms/{realm}/users/{userID} Body:

{
    "attributes": {
        "myAttribute": [
            "NewValue"
        ]
    }
}
person TheFisherman    schedule 20.01.2021

Это вызывает изменение идентификатора при обновлении пользовательского атрибута через Keycloak REST API PUT ../realms/{realm}/users/{userID}

и вам нужно дважды ПОЛУЧИТЬ /{realm}/users, чтобы получить новое значение в ответе

person Hilman Maulana    schedule 24.02.2021