Не удалось создать пользователя с паролем через Keycloak Rest API

Я пытаюсь перенести пользователей из существующей базы данных. Пароли зашифрованы с помощью sha512. Я использую Keycloak 10 с REST API.

Я ознакомился с CredentialRepresentation и имею попробуйте поместить JSON в строки для атрибутов secretData и credentialData.

Мой почтовый пользователь (с правильной авторизацией) возвращает ошибку: unknown_error.

POST <someDomain>/auth/admin/realms/assure/users
{
"firstName": "test_encrypte",
"lastName":"test_encrypte", 
"email":"[email protected]", 
"credentials": [{
    "type":"password",
            "credentialData" : "{\"value\":\"fdVjg7Ed/dck1eSGobCHG4JtObyE3BNE3xZhCuuJ0PpmGB4d/OO+t0C5PwYhtOnUV++X2Jh0xmNdNu+sTkt4Bw==\",\"salt\":\"98cj35ZuYZR7S6N.MvZ2lA/UYfWAztXfF.nm/hFIQso\"}",
    "secretData": "{\"algorithm\":\"sha512\",\"hashIterations\":1}"
}],
"username":"encrypt",
"emailVerified": false,
"enabled": true,
"attributes": {"assureId":"10406440"}
}

Я использую keycloak отдельно.

Мой запрос


person jeremy.raf    schedule 29.01.2021    source источник


Ответы (2)


У вас есть некоторые проблемы с вашим JSON, сначала вместо:

"secretData": "{\"algorithm\":\"sha512\",\"hashIterations\":1}"

it is:

"credentialData": "{\"algorithm\":\"sha512\",\"hashIterations\":1}"

как вы можете проверить в репозиторий Keycloak с открытым исходным кодом.

и вместо

"credentialData" : "{\"value\":\"fdVjg7Ed/dck1eSGobCHG4JtObyE3BNE3xZhCuuJ0PpmGB4d/OO+t0C5PwYhtOnUV++X2Jh0xmNdNu+sTkt4Bw==\",\"salt\":\"98cj35ZuYZR7S6N.MvZ2lA/UYfWAztXfF.nm/hFIQso\"}",

на самом деле:

"secretData" : "{\"value\":\"fdVjg7Ed/dck1eSGobCHG4JtObyE3BNE3xZhCuuJ0PpmGB4d/OO+t0C5PwYhtOnUV++X2Jh0xmNdNu+sTkt4Bw==\",\"salt\":\"98cj35ZuYZR7S6N.MvZ2lA/UYfWAztXfF.nm/hFIQso\"}",

как вы можете проверить в репозиторий Keycloak с открытым исходным кодом.

Наконец, значение соли должно быть закодировано с основанием 64, поэтому вместо

98cj35ZuYZR7S6N.MvZ2lA/UYfWAztXfF.nm/hFIQso\

должно быть:

OThjajM1WnVZWlI3UzZOLk12WjJsQS9VWWZXQXp0WGZGLm5tL2hGSVFzbw==

Json, который вы ищете, это:

​​​​{"firstName":"test_encrypte","lastName":"test_encrypte","email":"[email protected]","credentials":[{"type":"password","secretData":"{\"value\":\"fdVjg7Ed/dck1eSGobCHG4JtObyE3BNE3xZhCuuJ0PpmGB4d/OO+t0C5PwYhtOnUV++X2Jh0xmNdNu+sTkt4Bw==\",\"salt\":\"OThjajM1WnVZWlI3UzZOLk12WjJsQS9VWWZXQXp0WGZGLm5tL2hGSVFzbw==\"}","credentialData": "{\"algorithm\":\"sha512\",\"hashIterations\":1}"}],"username":"encrypt","emailVerified": false,"enabled": true,"attributes": {"assureId":"10406440"}}

person dreamcrash    schedule 29.01.2021

Для информации, я нашел проблему: эти две строки не идентичны:

credentialData": "{​​​​​​​\"algorithm\":\"sha512\",\"hashIterations\":1}​​​​​​​"

"credentialData": "{\"algorithm\":\"sha512\",\"hashIterations\":1}"

Если я сравню их с Character Code Finder, десятичные коды будут другими. например, мой } код 125, 8203, 8203, 8203, 8203, 8203, 8203, 8203, а ваш 125.

PS: извините за мой английский, я французский.

@dreamcrash: Большое спасибо за ваше время

person jeremy.raf    schedule 29.01.2021
comment
Так что это была проблема с кодировкой, в конце концов, я обновляю свой ответ, надеюсь, с правильной кодировкой. - person dreamcrash; 29.01.2021