在新的 keycloak 用户帐户上设置所需的操作

问题描述 投票:0回答:4

我正在使用客户端创建一个新的 keycloak 用户。像这样的东西:

keycloak.realm(realm)
        .users()
        .create(user);

用户变量是一个

UserRepresentation
对象,我正在尝试添加
Update Password
所需的操作:

user.setRequiredActions(singletonList("Update Password"))

用户创建成功,问题是我没有所需的操作集

不确定我做错了什么,我应该在所需操作列表中指定不同的值吗?

谢谢

keycloak
4个回答
28
投票

弄清楚发生了什么。

Keycloak 有一个枚举来表示各种用户操作:

public static enum RequiredAction {
    VERIFY_EMAIL, UPDATE_PROFILE, CONFIGURE_TOTP, UPDATE_PASSWORD, TERMS_AND_CONDITIONS
}

所以该值应该是

"UPDATE_PASSWORD"
而不是
"Update password"


6
投票

要找出所有可能需要的操作别名,请从管理界面将目标领域导出为 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”标签下的字符串即可。


3
投票

现在在 Keycloak 8.x 中您可以使用

UserResource.toRepresentation().setRequiredActions(...);

更改登录名后手动触发“验证电子邮件”等操作。


0
投票

就我而言,我想在自定义 Keycloak 端点中验证所需的操作。不幸的是,使用

RequiredAction
枚举仅适用于内置必需操作。

为了获取自定义所需操作的列表,我执行了以下操作:

// MyCustomRealmResourceProvider implements RealmResourceProvider
...
List<String> availableRequiredActions = session
        .realms()
        .getRealm(realm.getName())
        .getRequiredActionProvidersStream()
        .map(RequiredActionProviderModel::getProviderId)
        .collect(Collectors.toList());

这将返回所有必需操作 ID 的列表。

© www.soinside.com 2019 - 2024. All rights reserved.