Проблема с назначением ролей пользователю при его создании с помощью Post HTTP-запроса

Я могу успешно создать пользователя, вызвав следующий путь в программном обеспечении Postman:

http://{KEYCLOAK_IP}/auth/admin/realms/{REALM_NAME}/users

Содержимое тела, которое я отправляю, выглядит следующим образом:

{
    "enabled":true,
    "username":"Reza",
    "email":"[email protected]",
    "firstName":"Reza",
    "lastName":"Azad",
    "credentials": [
        {
        "type":"password",
        "value":"123",
        "temporary":false
    }
    ]
}

Теперь предположим, что у нас есть клиент с именем browserApp, и у этого клиента есть роль с именем borwserAppRoleUser. Кроме того, у области есть роль, которая называется realmRoleUser. Чтобы включить вышеупомянутые роли в содержимое тела HTTP-запроса, я попробовал следующую структуру:

{
"enabled":true,
    "username":"Reza",
    "email":"[email protected]",
    "firstName":"Reza",
    "lastName":"Azad",
    "credentials": [
        {
        "type":"password",
        "value":"123",
        "temporary":false
    }
    ],
    "role": [
       {
           "id": "borwserAppRoleUser",
           "name": "test",
           "description": "${role_create-client}",
           "composite": false,
           "clientRole": true,
           "containerId": "browserApp"
       },
        {
            "id":"realmRoleUser",
            "composite":false,
            "clientRole":false
        }

    ]

}

Отправка вышеуказанного содержимого тела приводит к неверному ответу на запрос 400. В ошибках содержится это сообщение:

Нераспознанное поле «роль» (класс org.keycloak.representations.idm.UserRepresentation), не помеченное как игнорируемое

Кроме того, я уверен, что остальная часть объекта роли неверна.

Я искал примеры в Интернете, но не смог найти ни одного образца, касающегося назначения ролей. Может ли кто-нибудь помочь мне решить эту проблему?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

REST API не поддерживает роли области и клиента с помощью отдельных данных JSON. Он поддерживается только с помощью Add Realm с импортом JSON.

Простой формат JSON подобен этому, но ему нужны дополнительные данные. Это рабочий пример для импорта данных Realm JSON

{
    "id": "test",
    "realm": "test",
    "users": [
        {
            "enabled": true,
            "username": "Reza",
            "email": "[email protected]",
            "firstName": "Reza",
            "lastName": "Azad",
            "credentials": [
                {
                    "type": "password",
                    "value": "123",
                    "temporary": false
                }
            ],
            "realmRoles": [
                "user"
            ],
            "clientRoles": {
                "borwserAppRoleUser": [
                    "test"
                ]
            }
        }
    ],
    "scopeMappings": [
        {
            "client": "borwserAppRoleUser",
            "roles": [
                "test"
            ]
        }
    ],
    "client": {
        "borwserAppRoleUser": [
            {
                "name": "test",
                "description": "${role_create-client}"
            }
        ]
    },
    "roles": {
        "realm": [
            {
                "name": "user",
                "description": "Have User privileges"
            }
        ]
    }
}

Если вы хотите назначить роль пользователя и роль клиента, используйте отдельный вызов API.

#1 Назначить роль пользователя в области

POST {KEYCLOAK-IP}/auth/admin/realms/{REALM-NAME}/users/{USER-UUID}/role-mappings/realm

В теле сообщения

[
    {
        "id": {REALM ROLE UUID},
        "name": {ROLE NAME},
        "composite": false,
        "clientRole": false,
        "containerId": {REALM NAME}
    }
]

1.1 Получите мастер-токен - здесь

1.2 Получить UUID пользователя

1.3 Получить UUID и имя роли Realm

1.4 Роль области POST в пользователя

#2 Назначить пользователю роль клиента

POST {KEYCLOAK-IP}/auth/admin/realms/{REALM-NAME}/users/{USER-UUID}/role-mappings/clients/{CLIENT-UUID}

В теле сообщения

[
    {
        "id": {CLIENT ROLE ID},
        "name": {ROLE NAME},
        "description": "${role_create-client}",
        "composite": false,
        "clientRole": true,
        "containerId": {CLIENT-UUID}
    }
]

2.1 Получить мастер-токен 2.2 Получить UUID пользователя - то же 1.2 2.2 Получить UUID клиента

2.3 Получить UUID и имя роли клиента

2.4 Роль клиента POST в пользователя

Наконец, подтвердите обе назначенные роли этим API.

GET {KEYCLOAK-IP}/auth/admin/realms/{REALM-NAME}/users/{USER-UUID}/role-mappings

Другие вопросы по теме