Keycloak сбросить пароль пользователя - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть пользователь в keycloak, и я хочу сбросить его пароль.

Пароль уже существует в БД и создается с помощью Spring's BCryptPasswordEncoder.

Это мой новый пароль:$2a$10$.Y5G9KV1JCToOifuzvbZf.guYplSLnpqmNkPdD2k2IZc3wNAMpyjC

И вот как я пытаюсь сбросить существующий:

CredentialRepresentation newCreds = new CredentialRepresentation();
newCreds.setType(CredentialRepresentation.PASSWORD);
newCreds.setHashedSaltedValue(newPassword);
newCreds.setAlgorithm("bcrypt");
newCreds.setTemporary(false);

getKeycloakClient().realm("master").users().get(userId).resetPassword(newCreds);

Это не работает.Я получаю сообщение об ошибке: javax.ws.rs.BadRequestException: HTTP 400 Bad Request

Но когда я изменяю его на:

CredentialRepresentation newCreds = new CredentialRepresentation();
newCreds.setType(CredentialRepresentation.PASSWORD);
newCreds.setValue("testPassword");
newCreds.setTemporary(false);

getKeycloakClient().realm("master").users().get(userId).resetPassword(newCreds);

Работает нормально.

Как мне сбросить пароль в Keycloak, используя уже существующийпароль, зашифрованный с помощью BCrypt?

РЕДАКТИРОВАТЬ:

Теперь я знаю, что я должен также отправить соль для моего пароля, установив newCreds.setSalt(salt), но все еще есть одна проблема.Keycloak принимает Base64 для этого, а Spring BCryptPasswordEncoder генерирует значения с символом ., которые не принимаются в BAse64

...