Добавить нового пользователя с учетными данными Временное свойство не работает - PullRequest
1 голос
/ 16 октября 2019

Keycloak REST API в модели UserRepresentation есть свойство «credentials», которое имеет (type = "пароль", значение = "some", временное = true / false} При добавлении нового пользователя я не буду заставлять пользователя изменять егопароль при первом входе в систему. Я знаю, что это можно сделать глобально в «Обязательных действиях» в параметрах «Область» / «Авторизация», но если «принудительное изменение пароля» не установлено по умолчанию. Я подумал, что это можно контролировать с помощью настройки этого свойства в user.credentials. модель, но выглядит так, как будто это полностью фиктивное свойство и не оказывает никакого влияния, всегда работает как ложь. Я прав?

PS Я также смотрю на модель в https://github.com/keycloak/keycloak/blob/b4b3527df7656bfaaee351ec414e56c683c134c2/services/src/main/java/org/keycloak/services/resources/admin/UserResource.java Мне нравится resetPasswordон настроен, но не в updateUser (который, как я полагаю, используется и для добавления пользователя).

{
    "username": "New_User_3",
    "enabled": true,
    "firstName": "NewUserDemoFirst",
    "lastName": "NewUserDemoLast",
    "email": "New_User_3@mail.test",
    "attributes": {     
    },
    "access": {
        "manageGroupMembership": false,
        "view": false,
        "mapRoles": false,
        "impersonate": false,
        "manage": false
    },
    "credentials": [
        {
            "type": "password",
            "temporary": true,
            "value": "xM0K+G"
        }
    ]
}

1 Ответ

0 голосов
/ 17 октября 2019

, но похоже, что это полностью фиктивное свойство и не дает никакого эффекта, всегда работает как ложное. Я прав?

Да.

Кажется, это ошибка Keycloak. Я также могу воспроизвести его.

Чтобы исправить ошибку, я думаю, что следующие строки должны быть добавлены к org.keycloak.services.resources.admin.UserResource.updateUserFromRep():

List<CredentialRepresentation> credentials = rep.getCredentials();
if (credentials != null) {
    for (CredentialRepresentation credential : credentials) {
        if (CredentialRepresentation.PASSWORD.equals(credential.getType())
                 && credential.isTemporary() != null && credential.isTemporary()) {
            user.addRequiredAction(UserModel.RequiredAction.UPDATE_PASSWORD);
        }
    }
}

Обходной путь должен вызвать reset-password после созданияuser.

PUT / {realm} / users / {id} / reset-password

См. также: https://www.keycloak.org/docs-api/7.0/rest-api/index.html

...