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
方法似乎没有允许您提供正文的变体,因此您可能需要使用 execute
或exchange
接受 HTTP 方法和请求实体的方法。事实上,RestTemplate
API 使得这很难做到,因为通常假设 DELETE
请求没有主体。
希望有人能帮助我解决这个问题。我已经创建了自己的 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
方法似乎没有允许您提供正文的变体,因此您可能需要使用 execute
或exchange
接受 HTTP 方法和请求实体的方法。事实上,RestTemplate
API 使得这很难做到,因为通常假设 DELETE
请求没有主体。