我有一个用户在密钥斗篷中,我想重设他的密码。
该密码已存在于数据库中,并且是通过Spring的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);
它工作正常。
如何使用已使用BCrypt加密的密码重置密钥斗篷中的密码?
编辑:
现在,我知道我必须通过设置newCreds.setSalt(salt)
来发送盐作为密码,但是仍然存在一个问题。 Keycloak为此接受Base64,Spring的BCryptPasswordEncoder生成带有.
字符的值,BAse64不接受该字符