【问题标题】:Unable to create a new user using keycloak: 403 unknown_error无法使用 keycloak 创建新用户:403 unknown_error
【发布时间】:2020-11-07 16:34:35
【问题描述】:

之前有人问过这个问题,但没有一个解决方案对我有用。 我创建了一个 bash 脚本来在我的密钥斗篷服务器上注册一个新用户。 bashscript如下所示:

#!/bin/sh
RESULT=$(curl -s --location --request POST 'http://localhost:8180/auth/realms/master/protocol/openid-connect/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id=admin-cli' --data-urlencode 'client_secret=12345678-12a3-1234-bc12-d12345678910');
TOKEN=$(echo $(echo "$RESULT" | jq .access_token))
TOKEN=$(echo "${TOKEN//\"}")
echo "$TOKEN\n\n"
USER=$(curl --location -v --request POST 'http://localhost:8180/auth/admin/realms/MyMarketplace/users' --header 'Content-Type: application/json' --header "Authorization: Bearer $TOKEN" --data-raw '{"enabled":"true", "username":"app-user"}');
echo $USER;

当我运行这个脚本时,我不断得到以下输出:

HTTP/1.1 403 Forbidden
< Connection: keep-alive
< X-XSS-Protection: 1; mode=block
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< Content-Type: application/json
< Content-Length: 25
< Date: Fri, 17 Jul 2020 20:11:40 GMT
< 
{ [25 bytes data]
100    66  100    25  100    41    974   1597 --:--:-- --:--:-- --:--:--  1640
 * Connection #0 to host localhost left intact
{"error":"unknown_error"}

我不知道为什么。这是我尝试过的:

  • 我已确保发送请求的 URL 正确。
  • 我已确保用户名是唯一的,并且我已提供所有必填字段。
  • 在 MyMarketplace 领域中,我从客户端“领域管理”中添加了一个领域角色“管理员”和客户端角色“管理用户”,并将此领域角色分配给我的客户范围(按照 @ 中给出的步骤) 987654321@回答)
  • 在 Master 领域,我将 manage-users 角色分配给客户端 admin-cli 的范围。

这些都没有产生任何结果,所以我已经没有选择了。 如果有人能帮助我了解我所缺少的,我将不胜感激。

【问题讨论】:

    标签: keycloak


    【解决方案1】:

    像您一样使用和配置admin-cli 客户端,但在MyMarketplace 领域。不要使用master 领域。

    【讨论】:

    • 谢谢!我更新了使用MyMarketplace 令的第一个请求,并以相同的方式配置了admin cli(从realm-management 为其分配manage-users 客户端角色)。我还更新了client_secret。做完这一切后,我仍然得到同样的错误。
    • @W.K.S 检查 Keycloak 日志以了解 unknown_error 的含义。可能是一些空指针,也可能是负载中的某些字段丢失。
    • 你是对的,这是一个空指针异常。请求正文没有被解析,因为我的内容长度没有被发送。请求必须包含Content-LengthContent-TypeHostContent-Type 必须是 application/json
    【解决方案2】:

    使用http://localhost:8180/auth/realms/MyMarketplace/protocol/openid-connect/token 获取access_token 并从realm-management 客户端在Service Account Roles 中赋予admin-cli 客户端manage-users 角色,然后在标题和"enabled": true, "username": "user" 正文中使用访问令牌调用http://localhost:8180/auth/admin/realms/MyMarketplace/users。 确保您启用的布尔值看起来像这个并且不使用"" 我认为keycloak 将您的请求读取为字符串。 我想它会解决你的问题。

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2018-09-05
      • 2020-04-17
      • 2021-07-01
      • 2017-05-01
      • 1970-01-01
      • 2020-10-30
      • 2021-06-21
      • 2020-06-12
      相关资源
      最近更新 更多