[英]how to get user Roles and client roles when authenticate from keycloak
[英]Keycloak REST API Unable to Delete client-level roles from user role mapping
希望有人可以幫助我。 我創建了自己的 Keycloak Realm 和客戶端。 我正在使用來自 org.keycloak.adapters.springsecurity.client.KeycloakRestTemplate 的 Spring boot 和 KeycloakRestTemplate; 撥打我所有的電話。
我已經成功地將客戶端級角色添加到任何給定用戶的用戶角色映射中。
使用 Keycloak API 文檔時,我在 URI 前面加上 /admin/realms/。 到目前為止,我的所有請求都有效(從我的客戶端獲取用戶列表,獲取具有特定客戶端級角色的用戶列表,甚至如上所述向用戶添加客戶端級角色)
我的問題是我無法從用戶中刪除客戶端級角色。 我查看了 keycloak 文檔,看起來我已經正確地遵循了所有內容。 我還確保用戶具有可刪除的適用客戶角色。 我真的很感謝任何意見或幫助!
https://www.keycloak.org/docs-api/14.0/rest-api/index.html
“從用戶角色映射刪除客戶端級角色 DELETE /{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 Unsupported Media Type: [{"error":"RESTEASY003065: Cannot consume content type"}]
編輯1:作為預防措施,我還為自己提供了所有客戶的所有可用角色。 我知道即使通過 API 也需要一些角色來執行某些任務。 我已經考慮到了這一點。
與 Keycloak 交互的另一種方法是使用keycloak starter 依賴項和keycloak 管理客戶端。
添加上面提到的依賴項。
配置 Keycloak 管理員用戶。
public Keycloak getAdminKeycloakUser() { return KeycloakBuilder.builder() .serverUrl(keycloakAuthUrl) .grantType(OAuth2Constants.PASSWORD) .realm(masterRealm).clientId(masterClient) .username(adminUsername).password(adminPassword) .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build()) .build(); }
使用此管理員用戶,我們可以刪除客戶端用戶以及其他操作。
getAdminKeycloakUser().realm(realm).clients().roles().deleteRole(roleName);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.