我正在使用客户端创建一个新的 keycloak 用户。像这样的东西:
keycloak.realm(realm)
.users()
.create(user);
用户变量是一个
UserRepresentation
对象,我正在尝试添加 Update Password
所需的操作:
user.setRequiredActions(singletonList("Update Password"))
用户创建成功,问题是我没有所需的操作集
不确定我做错了什么,我应该在所需操作列表中指定不同的值吗?
谢谢
弄清楚发生了什么。
Keycloak 有一个枚举来表示各种用户操作:
public static enum RequiredAction {
VERIFY_EMAIL, UPDATE_PROFILE, CONFIGURE_TOTP, UPDATE_PASSWORD, TERMS_AND_CONDITIONS
}
所以该值应该是
"UPDATE_PASSWORD"
而不是 "Update password"
要找出所有可能需要的操作别名,请从管理界面将目标领域导出为 json。在 json 中,您将找到“requiredActions”数组,其中列出了所有合法操作,如下所示:
"requiredActions": [
{
"alias": "CONFIGURE_TOTP",
"name": "Configure OTP",
"providerId": "CONFIGURE_TOTP",
"enabled": true,
"defaultAction": false,
"priority": 10,
"config": {}
},
{
"alias": "terms_and_conditions",
"name": "Terms and Conditions",
"providerId": "terms_and_conditions",
"enabled": false,
"defaultAction": false,
"priority": 20,
"config": {}
},
在代码中设置所需操作列表时,只需使用“alias”标签下的字符串即可。
现在在 Keycloak 8.x 中您可以使用
UserResource.toRepresentation().setRequiredActions(...);
更改登录名后手动触发“验证电子邮件”等操作。
就我而言,我想在自定义 Keycloak 端点中验证所需的操作。不幸的是,使用
RequiredAction
枚举仅适用于内置必需操作。
为了获取自定义所需操作的列表,我执行了以下操作:
// MyCustomRealmResourceProvider implements RealmResourceProvider
...
List<String> availableRequiredActions = session
.realms()
.getRealm(realm.getName())
.getRequiredActionProvidersStream()
.map(RequiredActionProviderModel::getProviderId)
.collect(Collectors.toList());
这将返回所有必需操作 ID 的列表。