使用凭据添加新用户临时属性不起作用

Vit*_*lii 5 identity keycloak

UserRepresentation 模型中的 Keycloak REST API 有一个“credentials”属性,该属性具有 ( type = "password", value="some",temporary=true/false } 在添加新用户时,我不会强制用户更改其密码第一次登录。我知道它可以在领域/授权选项中的所需操作中全局完成,但是如果“强制更改密码”未设置为默认值。我想通过在 user.credentials 模型中设置该属性来控制它,但是看起来它完全是虚拟财产,不会产生任何效果,总是像 false 一样工作。我是对的吗?

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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

小智 8

您可以将所需的操作添加到 JSON 对象,如图所示。这将强制用户在首次登录时更新密码。

 {
   "username": "userxyz",
   "credentials": [
     {
       "type": "password",
       "value": "passwordabc",
       "temporary": true
     }
   ],
   "requiredActions": [
     "UPDATE_PASSWORD"
   ],
   ...
 }
Run Code Online (Sandbox Code Playgroud)


Koh*_*URA 1

但看起来它完全是虚拟财产,不会产生任何效果,始终为 false。我对吗 ?

是的。

这似乎是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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

reset-password解决方法是在创建用户后调用。

PUT /{realm}/users/{id}/重置密码

另请参阅:https://www.keycloak.org/docs-api/7.0/rest-api/index.html