Я могу успешно создать пользователя, вызвав следующий путь в программном обеспечении 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), не помеченное как игнорируемое
Кроме того, я уверен, что остальная часть объекта роли неверна.
Я искал примеры в Интернете, но не смог найти ни одного образца, касающегося назначения ролей. Может ли кто-нибудь помочь мне решить эту проблему?
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