keycloak - 对于 Keycloak REST Api 的任何 POST,获取 400 并带有消息 unknown_error
问题描述
例如,我想创建一个admin
用户使用admin-cli
客户端的新客户端。
令牌生成工作正常:
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
但是,当我想创建新的客户端角色或新客户端时,我总是会400
出错。我将日志级别更改为DEBUG
Keycloak 服务器中的日志级别,但除了看到显示令牌已成功创建的日志外,没有其他用处。
POST /auth/admin/realms/master/clients/7534ac42-fe8b-4cde-b6c6-c385f4958e3b/roles
400 {"error":"unknown_error"}
我正在使用与 JBoss Wildfly 容器一起运行的 Python v3.x 和 Keycloak v14.0.0。
查看admin
用户,它似乎具有所有角色,例如admin
, default-roles-master
,create-realm
并且我在列表中看不到要分配的任何角色,因为它似乎拥有一切。对于admin-cli
客户端也是一样。这两个(admin用户和admin-cli)的配置是你第一次启动服务器的默认配置。我是否需要任何额外的东西,比如创建一个新角色或其他东西才能让它发挥作用?
我创建机密客户端的有效负载:
payload = {
"name": "Some Name",
"clientId": "some-name",
"secret": "some-name-secret",
"enabled": true,
"publicClient": false,
"authorizationServicesEnabled": true,
"redirectUris" : ["/*"]
}
解决方案
我想回答我的问题,这样每个有类似情况的人都不会面临同样的问题。
原来我发送的有效载荷不正确,感谢@JanGaraj指出了这一点。但是我在这里要回答的是,如何找出请求体应该是什么样子的。
首先,不要看文档。在文档中,所有字段都是可选的,并且 URL 也不正确。
最简单的方法是在本地启动 Keycloak 服务器并在 Firefox 或 Chrome 中登录管理控制台,然后按F12
打开Development Mode
。然后你可以在那里看到所有的请求/响应。
例如,如果您想查看如何更新角色,请转到Roles
主菜单上的菜单项并选择一个角色并更新它。您可以PUT
通过其正文查看请求。这会告诉您需要传递什么以及传递到哪个 URL。
作为提示,您不需要在更新时传递所有内容,通常只有 ID 和您要更新的字段就足够了。
推荐阅读
- r - 是否可以沿 facet_grid() 使用 geom_table()?
- java - JDK SE 8 的内存分配问题(来自 AdoptOpenJDK 的 OpenJDK 8 不会发生)
- c++ - 可以使用 SPACE 代替 ENTER 来接受 C++ 中的输入吗?
- pentaho - 为什么你认为 pentaho 仪表板选择过滤器会在浏览器重新加载时得到修复?
- c# - 如何制作 2D Unity Sprite Jump?
- excel - 字体格式和或条件
- java - 为什么即使我等待站点完成加载,我也无法获取数据?
- matlab - 我在 matlab 中编写了以下代码来随机化,然后在 3x4 矩阵中将数字 3 到 8 舍入,但我不想在行中重复数字
- python - Dask read_parquet 用于嵌套镶木地板文件
- sqlite - 使用 Kotlin Exposed 时,如何处理 sqlite 数据库中数字的缺失值?