Keycloak Admin API - Как проверить, соответствует ли пароль политике паролей - PullRequest
0 голосов
/ 21 января 2019

Я использую API администратора Keycloak для создания нового пользователя.Как я могу проверить, что данный пароль действительно соответствует политике паролей перед созданием пользователя?

Я использую следующий код:

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" завершается ошибкой, если данный пароль не соответствует политике паролей, но на этом этапе пользователь уже был создан в keycloak, и мне приходится его удалять, поскольку у меня нет способа "откатить".

Другой вариант - проверить, в порядке ли пароль перед созданием пользователя.Но как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы получите сообщение об ошибке проверки как объект 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;
    }
0 голосов
/ 21 января 2019

UserResource имеет метод getUsers () для поиска пользователя по имени пользователя и проверки его атрибутов. Если не удалось выполнить сброс resetPassword, вы можете найти пользователя, применить проверки, если это необходимо, и снова сбросить пароль.

...