json - 无法使用 Admin REST Api 在 Keycloak 中创建复合角色
问题描述
我正在尝试使用 Admin REST API 在我的 Keycloak 6.0.1 系统中以编程方式管理角色和组合。根据文档,这就是我想要使用的:
https://www.keycloak.org/docs-api/6.0/rest-api/index.html#_roles_resource
马上,我的 Keycloak API 的基本 URL 似乎是:
https://example.com/auth/admin
而不是/auth
, 正如文档似乎建议的那样。如果我使用文档中指定的基本 URL,我会得到 404。当我通过浏览器管理安装时,通过检查 Kubernetes 管理页面的操作,我发现了这个备用 URL 结构。
无论如何,我现在使用POST /{realm}/clients/{id}/roles
端点成功地创建了角色。当我尝试使用POST /{realm}/clients/{id}/roles/{role-name}/composites
这样的 POST 添加复合材料时,问题就开始了:
/auth/admin/realms/REDACTED/clients/546052d9-6ba1-483e-93a5-a5fda51505b8/roles/%5ECouponAttemptsLog%25Unowned%25Write/composites
authorization: Bearer REDACTED
Content-Type: application/json
Accept: */*
Content-Length: 217
User-Agent: node-fetch/1.0 (+https://github.com/bitinn/node-fetch)
Accept-Encoding: gzip,deflate
Connection: close
Host: REDACTED
{"roles":[{"name":"^CouponAttemptsLog/id%Unowned%Write"},{"name":"^CouponAttemptsLog/code%Unowned%Write"},{"name":"^CouponAttemptsLog/eventId%Unowned%Write"},{"name":"^CouponAttemptsLog/attemptedDate%Unowned%Write"}]}
Keycloak 记录的错误消息是:
14:18:02,617 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-4884) Uncaught server error: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token
...并且 Keycloak 返回没有文本的 500 响应。
据我所知,这与 Keycloak 6 API 文档中指定的预期请求形状相匹配,我不知道可能导致这种反序列化失败的原因。只是为了 yuks,我尝试发送一个裸 JSON 数组作为正文,没有任何改进。
我究竟做错了什么?我知道来自 Keycloak 的错误意味着它试图将某些东西转换为不可能的 ArrayList,但我不知道是什么以及为什么。
解决方案
它需要一组角色对象。尝试这个:
[
{
"name": "^CouponAttemptsLog/id%Unowned%Write"
},
{
"name": "^CouponAttemptsLog/code%Unowned%Write"
},
{
"name": "^CouponAttemptsLog/eventId%Unowned%Write"
},
{
"name": "^CouponAttemptsLog/attemptedDate%Unowned%Write"
}
]
看一眼代码,我认为除了名称之外,您还需要包含角色 ID……即使文档说其中的所有字段RoleRepresentation
都是可选的。
推荐阅读
- python-3.x - Python - 在有序列表中的两个元素之间创建一个新的子列表
- javascript - 使用 jquery 单击另一个按钮时禁用按钮
- c++ - C++ std::set 元编程 set of set ... 嵌套
- java - 从 Java 中的 VendorID、ProductID 自动检测串行 COM 端口
- django - Django 中的已验证数据中没有相关的外键
- react-admin - 斑马外观:列表中的交替线条(无悬停)
- python - 在 Django 中查询数据库或模型中不存在的字段时捕获错误
- kaltura - kaltura 配置中的 uiconfid 是什么
- javascript - $($(elContainer).find('.image-wrapper').eq(index)[0]).find(' > img').remove();
- git - Git 获取更新的文件