1

我正在使用 Keycloak 管理 API 创建一个新用户。在创建用户之前,如何检查给定的密码是否确实符合领域密码策略?

我正在使用以下代码:

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中创建了,我必须删除它,因为我没有办法到“回滚”。

另一个选项是在创建用户之前检查密码是否正确。但是我该怎么做呢?

4

2 回答 2

1

您将收到作为 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;
    }
于 2019-01-29T10:44:10.070 回答
0

UserResource 有 getUsers() 方法通过用户名查找用户并检查其属性。如果重置密码失败,您可以找到用户,根据需要应用检查,然后再次重置密码。

于 2019-01-21T19:59:07.853 回答