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"
}
]
}
答案 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"
],
...
}