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

时间:2018-03-27 11:22:40

标签: java keycloak keycloak-services

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

3 个答案:

答案 0 :(得分:1)

如果您未使用admin领域的master用户。

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

Adding realm-management roles to the user

答案 1 :(得分:1)

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

  1. 创建一个角色,该角色至少具有manage-users的领域管理角色 enter image description here

enter image description here

  1. 转到客户的Scope标签,并将角色添加到您的Realm Roles enter image description here

答案 2 :(得分:1)

我在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. 除了将新角色添加到“范围”之外,我还必须将该角色添加到“服务帐户角色”。

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