Keycloak KeyClope管理API-如何检查密码是否符合密码策略
我正在使用KeyClope管理API创建一个新用户。 在创建用户之前,如何检查给定的密码是否确实符合域密码策略 我正在使用以下代码:Keycloak KeyClope管理API-如何检查密码是否符合密码策略,keycloak,password-policy,Keycloak,Password Policy,我正在使用KeyClope管理API创建一个新用户。 在创建用户之前,如何检查给定的密码是否确实符合域密码策略 我正在使用以下代码: Response response = usersResource.create(userRepresentation); String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1"); UserResource userResource = usersResour
Response response = usersResource.create(userRepresentation);
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
UserResource userResource = usersResource.get(userId);
CredentialRepresentation passwordCred = new CredentialRepresentation();
passwordCred.setTemporary(false);
passwordCred.setType(CredentialRepresentation.PASSWORD);
passwordCred.setValue(somePassword);
userResource.resetPassword(passwordCred);
上面代码的问题是,如果给定的密码不符合密码策略,“resetPassword”方法将失败,但此时用户已经在keydove中创建,我必须删除它,因为我无法“回滚”
另一个选项是在创建用户之前检查密码是否正确。但是我该怎么做呢?UserResource有一个getUsers()方法,可以通过用户名查找用户并检查其属性。
如果重置密码失败,您可以找到用户,根据需要应用检查,然后再次重置密码。您将以JSON对象的形式收到验证失败消息,类似这样的事情
{"error":"invalidPasswordMinLengthMessage","error_description":"Invalid password: minimum length 8."}
我使用以下代码从ClientErrorException
public void resetUserInvalidPassword() {
String userId = createUser("user1", "user1@localhost");
try {
CredentialRepresentation cred = new CredentialRepresentation();
cred.setType(CredentialRepresentation.PASSWORD);
cred.setValue(" ");
cred.setTemporary(false);
realm.users().get(userId).resetPassword(cred);
} catch (ClientErrorException e) {
Response response = e.getResponse();
System.out.println(getErrorMessage(response));
response.close();
}
}
private String getErrorMessage(Response response) {
Object entity = response.getEntity();
String errorMessage = "(none)";
if (entity instanceof ErrorRepresentation)
errorMessage = ((ErrorRepresentation) entity).getErrorMessage();
else if (entity instanceof InputStream)
errorMessage = new BufferedReader(new InputStreamReader((InputStream)entity)).lines().collect(Collectors.joining("\n"));
else if (entity != null)
errorMessage = entity.toString();
return errorMessage;
}