Keycloak REST API 无法从用户角色映射中删除客户端级角色

Keycloak REST API Unable to Delete client-level roles from user role mapping

希望有人能帮助我解决这个问题。我已经创建了自己的 Keycloak Realm 和客户端。我正在使用 Spring 引导和来自 org.keycloak.adapters.springsecurity.client.KeycloakRestTemplate 的 KeycloakRestTemplate;接听我所有的电话。

我已成功将客户端级角色添加到用户角色映射到任何给定用户。

在使用 Keycloak API 文档时,我在 URI 前加上 /admin/realms/ 前缀。到目前为止,我的所有请求都已成功(从我的客户端获取用户列表,获取具有特定客户端级别角色的用户列表,甚至如上所述向用户添加客户端级别角色)

我的问题是我无法删除用户的客户端级别角色。我查看了 keycloak 文档,看起来我已经正确地遵循了所有内容。我还确保用户具有可用于删除的适用客户角色。我非常感谢您提供的任何意见或帮助!!

https://www.keycloak.org/docs-api/14.0/rest-api/index.html

"从用户角色映射中删除客户端级别的角色 删除/{realm}/users/{id}/role-mappings/clients/{client}"

import org.keycloak.adapters.springsecurity.client.KeycloakRestTemplate;

.
.
.


    @Autowired
        private KeycloakRestTemplate restTemplate;
.
.
.
.
.


UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(keycloakServerUrl + "/admin/realms/"+keycloakRealm+"/users/"+userId+"/role-mappings/clients/"+keycloakClientId);

this.restTemplate.postForEntity(builder.toUriString(), rolesList, List.class);  // this works! Note: rolesList is an List<RoleRepresentation> object

.
.
.

this.restTemplate.delete(builder.toUriString(), rolesList); // Does not work!

URI: http://XXXXXXXXXXXXXXX:8180/auth/admin/realms/VLS/users/2144cc43-59f4-4406-9527-2a59ee0c3751/role-mappings/clients/53e659e1-7cef-4dbb-8cdd-b786ca3a44a4

调用删除时出错API:org.springframework.web.client.HttpClientErrorException$UnsupportedMediaType:415 不支持的媒体类型:[{“错误”:“RESTEASY003065:无法使用内容类型”}]

编辑 1:作为预防措施,我还事先给了自己所有客户的所有可用角色。我知道即使通过 API 也需要一些角色来执行某些任务。我已经考虑到了这一点。

KeycloakRestTemplate appears to inherit all of its methods directly from Spring’s RestTemplate. According to the documentation 对于那个 class,delete 的第二个参数不是请求主体,正如我认为你想要的那样。相反,它是用于在 URI 中扩展模板变量的对象的可变参数。

delete 方法似乎没有允许您提供正文的变体,因此您可能需要使用 executeexchange 接受 HTTP 方法和请求实体的方法。事实上,RestTemplate API 使得这很难做到,因为通常假设 DELETE 请求没有主体。