【问题标题】:Add new user with credentials Temporary property does not working添加具有凭据的新用户 临时属性不起作用
【发布时间】:2020-02-13 11:42:22
【问题描述】:

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

附:我还查看了 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"
        }
    ]
}

【问题讨论】:

  • 尝试在 Keycloak 管理控制台中创建用户,然后为该用户设置临时凭据并跟踪执行此操作时 Keycloak 管理 UI 发送到 Keycloak 后端的请求。

标签: keycloak identity


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    但看起来它完全是虚拟属性并且没有任何效果,总是作为假。我说的对吗?

    是的。

    这似乎是 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

    【讨论】:

    猜你喜欢
    • 2013-11-01
    • 2021-01-20
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多