10

我正在尝试以编程方式访问在 keycloak 中创建用户。但我得到 403 作为状态码。我正在关注以下链接。

https://technology.first8.nl/programmatically-adding-users-in-keycloak/

谁能帮我?提前致谢

我使用以下代码创建用户

Keycloak kc = Keycloak.getInstance(
                     "http://{server name}:8080/auth",
                     "{realm name}", // the realm to log in to
                     "{useraname}", 
                     "{password}",  // the user
                     "{client id}",
                     "{client secret key}");

            CredentialRepresentation credential = new CredentialRepresentation();
            credential.setType(CredentialRepresentation.PASSWORD);
            credential.setValue("test123");
            UserRepresentation user = new UserRepresentation();
            user.setUsername("codeuser");
            user.setFirstName("sampleuser1");
            user.setLastName("password");

            user.setCredentials(Arrays.asList(credential));
            user.setEnabled(true);
            Response result = kc.realm("{realm name}").users().create(user);

response.status 以 403 的形式出现

4

4 回答 4

23

我遇到了同样的问题。这就是我修复它的方式。

  1. 创建一个至少具有领域管理角色的角色manage-users 在此处输入图像描述

在此处输入图像描述

服务器 9.0.2 的 UI 更新 服务器 9.0.2 的 UI 更新

  1. 转到您客户的Scope选项卡并将角色添加到您的Realm Roles 在此处输入图像描述
于 2018-11-21T11:52:28.973 回答
5

我在 KeyCloak 9.0.3 中遇到了同样的问题。最终对我有用的是:

  1. 在目标领域(我正在尝试创建用户)上使用带有客户端凭据的 admin-cli 客户端
curl \
  -d "client_id=admin-cli\
  -d "client_secret=<YOUR_CLIENT_SECRET>" \
  -d "grant_type=client_credentials" \
  "http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token"

我不知道为什么,但是在主域上使用管理客户端根本不适合我。

  1. 使用上面正确答案中提到的角色在目标领域中设置 admin-cli 客户端。

  2. 除了将新角色添加到 Scope 之外,我还必须将角色添加到 Service Account Roles。

BTW 客户端凭据访问令牌甚至没有在 Keycloak 9.0.3 的 Admin Rest API 文档中作为选项提及,但它确实有效。

于 2020-08-10T18:34:06.350 回答
4

如果您不使用领域中的admin用户master

您需要为用于获取 Keycloak 实例的用户分配适当的角色,例如manage-users来自客户端的角色。realm-management

向用户添加领域管理角色

于 2018-03-28T00:14:32.357 回答
1

如果你使用Service Accounts验证,你需要在选项卡中添加先例答案的角色Service Accounts Roles

像下面KeyCloak 客户端管理员 Cli 服务帐户选项卡

于 2021-08-16T23:58:10.253 回答