提问者:小点点

对于任何到Keycloak REST Api的POST,获取400并显示消息unknown_error


例如,我希望使用admincli客户端创建一个具有admin用户的新客户端。

令牌生成工作正常:

POST /auth/realms/master/protocol/openid-connect/token
b'username=admin&password=admin&grant_type=password&client_id=admin-cli'

使用该令牌,我还可以进行一些查询,例如何时需要获取客户端的ID:

GET /auth/admin/realms/master/clients?clientId=my-test-cli
H' Authorization: Bearer xyz
H' Content-Type: application/json

然而,当我想创建一个新的客户端角色或新的客户端时,我总是得到< code>400错误。我在Keycloak服务器中将日志级别更改为< code>DEBUG,但是除了看到日志显示令牌已成功创建之外,没有任何有用的信息。

POST /auth/admin/realms/master/clients/7534ac42-fe8b-4cde-b6c6-c385f4958e3b/roles
400 {"error":"unknown_error"}

我使用的是与JBoss Wildfly容器一起运行的Python v3.x和Keyclock v14.0.0。

查看< code>admin用户,它似乎拥有所有角色,如< code>admin、< code > default-roles-master 、< code>create-realm,我在列表中没有看到任何要分配的角色,因为它似乎拥有所有角色。对于< code>admin-cli客户端也是如此。这两个配置(admin user和admin-cli)是首次启动服务器时的默认配置。我是否需要一些额外的东西,比如创造一个新的角色或者其他什么来让这个工作正常进行?

我创建机密客户端的有效负载:

payload = {
    "name": "Some Name",
    "clientId": "some-name",
    "secret": "some-name-secret",
    "enabled": true,
    "publicClient": false,
    "authorizationServicesEnabled": true,
    "redirectUris" : ["/*"]
}

共1个答案

匿名用户

我想回答我的问题,这样每个有类似情况的人都不会面临同样的问题。

结果是我发送的有效载荷不正确,感谢@JanGaraj指出了这一点。但是我在这里要回答的是,如何找出请求体应该是什么样子。

首先,不要查看文档。在文档中,所有字段都是可选的,URL也不正确。

最简单的方法是在本地启动Keycloak server,在Firefox或Chrome中登录管理控制台,然后按< code>F12打开< code >开发模式。然后您可以在那里看到所有的请求/响应。

例如,如果您想了解如何更新角色,请转到主菜单上的Roles菜单项,然后选择角色并更新它。您可以看到带有主体的PUT请求。这告诉你需要传递什么以及传递到什么URL。

作为提示,更新时不需要传递所有内容,通常只有 ID 和要更新的字段就足够了。