无法在 keycloak 中创建用户。获取 403 状态

Posted

技术标签:

【中文标题】无法在 keycloak 中创建用户。获取 403 状态【英文标题】:cannot create user in the keycloak. Getting 403 status 【发布时间】:2018-09-05 18:53:18 【问题描述】:

我正在尝试以编程方式访问 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

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我就是这样解决的。

    创建至少具有manage-users 领域管理角色的角色

服务器 9.0.2 的 UI 更新

    转到您客户的Scope 选项卡并将角色添加到您的Realm Roles

【讨论】:

这适用于我的 KC 服务器 3.4.0.Final 和相同版本的管理客户端;我的 Gradle 节是 compile group: 'org.keycloak', name: 'keycloak-admin-client', version: '3.4.0.Final'【参考方案2】:

如果您不使用来自master 领域的admin 用户。

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

【讨论】:

我已经分配了如上所示的角色,但我的状态仍然是禁止 你能用ErrorRepresentation找到错误信息吗?error = response.readEntity(ErrorRepresentation.class); error.getErrorMessage() RESTEASY003145:无法找到内容类型为 / 和类型为 org.keycloak.representations.idm.ErrorRepresentation 的 MessageBodyReader 当我添加上述代码行时发生此异常 你需要在你的依赖中有resteasy-jackson2-provider jar【参考方案3】:

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

    在目标领域(我正在尝试创建用户)上使用带有客户端凭据的 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"

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

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

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

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

【讨论】:

【参考方案4】:

如果使用Service Accounts进行认证,则需要在标签Service Accounts Roles中添加先例答案的角色

如下

【讨论】:

以上是关于无法在 keycloak 中创建用户。获取 403 状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keycloak 中创建脚本映射器?

Keycloak - 在领域中创建管理员用户

通过 keycloak admin 客户端在 keycloak 中创建用户返回 IllegalArgumentException

如何使用 REST API 在 Keycloak 中创建具有密码的用户?

我应该使用哪个凭证来生成令牌,然后使用 Postman 在 Keycloak DB 中创建用户?

如何在 Keycloak 中创建客户端以与 AWS Cognito 身份联合使用