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

时间:2019-10-16 16:11:20

标签: keycloak identity

UserRepresentation模型中的Keycloak REST API有一个“凭据”属性,该属性具有(type =“ password”,value =“ some”,临时= true / false} 在添加新用户时,我不会强迫用户在首次登录时更改其密码。我知道可以在“领域/授权”选项中的“必需的操作”中全局完成此操作,但是如果未将“强制更改密码”设置为默认值。我本来想通过设置user.credentials模型中的property来控制它,但是看起来它完全是伪属性并且没有任何效果,始终会作为false起作用。我对吗 ?

P.S。我还会在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"
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

  

但是看起来它完全是伪属性并且没有任何效果,始终以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);
        }
    }
}

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

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

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

答案 1 :(得分:0)

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

 {
   "username": "userxyz",
   "credentials": [
     {
       "type": "password",
       "value": "passwordabc",
       "temporary": true
     }
   ],
   "requiredActions": [
     "UPDATE_PASSWORD"
   ],
   ...
 }