首页 > 解决方案 > 无法通过 Keycloak Rest API 创建带密码的用户

问题描述

我正在尝试从现有数据库迁移用户。密码使用 sha512 加密。我将 Keycloak 10 与 REST API 一起使用。

我已阅读CredentialRepresentation并尝试将 JSON 放入属性secretDatacredentialData的字符串中。

我的帖子用户(具有正确的授权)返回“错误”:“未知错误”。

POST <someDomain>/auth/admin/realms/assure/users
{
"firstName": "test_encrypte",
"lastName":"test_encrypte", 
"email":"jeremy.rafflin@mail.fr", 
"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。

我的请求

标签: restmigrationkeycloakcredentialskeycloak-rest-api

解决方案


您的 JSON 有一些问题,首先不是:

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

它是:

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

你可以在Keycloak 开源 repo中查看。

而不是

"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 开源 repo中查看。

最后,盐值必须是 base 64 编码,所以而不是

98cj35ZuYZR7S6N.MvZ2lA/UYfWAztXfF.nm/hFIQso\

它一定要是:

OThjajM1WnVZWlI3UzZOLk12WjJsQS9VWWZXQXp0WGZGLm5tL2hGSVFzbw==

您正在寻找的 Json 是:

{
  "firstName": "test_encrypte",
  "lastName": "test_encrypte",
  "email": "jeremy.rafflin@ageo.fr",
  "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"
  }
}

推荐阅读