Keycloak API 创建用户 returns 403 Forbidden

Keycloak API to create users returns a 403 Forbidden

试验使用 Keycloak 作为身份提供者。我是 运行 通过使用 ./standalone.sh 脚本。

所以,我得到了这样的 access_token

curl --request POST \
  --url http://localhost:8080/auth/realms/master/protocol/openid-connect/token \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data client_id=admin-cli \
  --data client_secret=<the-client-secret-under-master-realm-for-admin-cli-client>

回复:

{
  "access_token": "the-access-token",
  "expires_in": 60,
  "refresh_expires_in": 0,
  "token_type": "Bearer",
  "not-before-policy": 0,
  "scope": "profile email"
}

然后很快,在我的 test-realm 下,我尝试创建一个用户,如下所示:

curl --request POST \
  --url http://localhost:8080/auth/admin/realms/test-realm/users \
  --header 'Authorization: Bearer the-access-token' \
  --header 'Content-Type: application/json' \
  --data '{
    "firstName": "Sergey",
    "lastName": "Kargopolov",
    "email": "test@test.com",
    "enabled": "true",
    "username": "app-user"
}'

然后我被 403 击中:

< HTTP/1.1 403 Forbidden
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Referrer-Policy: no-referrer
< Date: Thu, 28 Jan 2021 23:43:57 GMT
< Connection: keep-alive
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< X-Content-Type-Options: nosniff
< Content-Type: application/json
< Content-Length: 25

有什么我想念的吗?我正在关注 this tutorial,并且我所做的一切都完全按照描述进行!

编辑:我尝试了密码授予方式来获取不记名令牌并且有效,但不是客户端秘密方式。我显然更喜欢客户端秘密方式(这是我目前遇到的问题)。这可能是什么问题?

要使用 Keycloak Rest API 创建用户,只需向 admin-cli 客户端请求一个代表管理员用户的令牌,方法是提供其名称和密码,例如:

TOKEN=$(curl -k -sS     -d "client_id=admin-cli" \
                        -d "username=$ADMIN_NAME" \
                        -d "password=$ADMIN_PASSWORD" \
                        -d "grant_type=password" \
                        http://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token)

从 $TOKEN 对象中提取访问令牌(让我们命名为 $ACCESS_TOKEN)。

然后创建用户如下:

curl -k -sS -X POST https://$KEYCLOAK_IP/auth/admin/realms/$REALM_NAME/users \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $ACCESS_TOKEN" \
        -d "$USER_JSON_DATA"

$USER_JSON_DATA 将是要创建的用户的 json 数据表示。无需将 admin 角色添加到默认使用 Keycloak 部署的 master admin。

如果正常设置,您只需要知道(正如我已经描述的那样)管理员的 名称和密码,无论如何这都是在初始设置中配置的。

如果您单击 admin 用户 > 角色,您将看到以下内容:

admin 用户,已经拥有 admin 角色。

Edit: I tried the Password Grant way to obtain the Bearer Token and that worked, but NOT the client secret way. I obviously prefer the client secret way (which is where I'm stuck currently). What could be the issue here?

现在,如果您完全按照原来的方式更改 admin_cli 配置,则需要向 Service-account-admin-cli 用户添加管理员角色。

现在的问题是 Service-account-admin-cli 用户是 User 部分中的 。尽管如此,您可以执行以下操作:

  1. 使用您的设置再次请求管理员令牌;
  2. 转到 Master Realm > Clients > admin-cli > Session > 单击 [Show Session]:

  1. 点击用户service-account-admin-cli;
  2. 转到角色映射;
  3. 分配 admin 角色;

由于 service-account-admin-cli 用户现在具有 admin 角色,代表该用户的令牌请求将包含创建用户所需的权限。

如果上述方法不起作用,请执行以下操作:

  • 领域大师;
  • 客户端 > admin-cli;
  • 转到映射器;
  • 点击[创建];
  • 作为映射器类型select“硬编码角色”;
  • 单击 Select 角色和 selection“管理员”;
  • 点击[保存]。