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)
但看起来它完全是虚拟财产,不会产生任何效果,始终为 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
| 归档时间: |
|
| 查看次数: |
8692 次 |
| 最近记录: |