У меня есть пользователь в 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