使用 Keycloak Admin Java API 向用户添加角色
Posted
技术标签:
【中文标题】使用 Keycloak Admin Java API 向用户添加角色【英文标题】:Add role to user using Keycloak Admin Java API 【发布时间】:2021-12-15 16:37:33 【问题描述】:目标是从我的 Angular 前端管理用户的角色。 前台将向我发送为用户指定的更新角色。
其实用户有["ROLE_A"]
管理员更新用户的角色。
现在前台向我发送:["ROLE_A","ROLE_B","ROLE_C"]
给定用户。
我的目标是能够更新此用户的角色。
可以有比以前更多或更少的权利。 (“差异列表”“正在工作”..(404 错误)仅当有比以前新的角色时.. 但不是当我删除一些角色时..)
public void updateUserRoles()
keycloak = keycloakService.getInstance();
List<RoleRepresentation> rolesOfUserActual = keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().listAll();
List<RoleRepresentation> rolesOfUserActualNew = keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().listAll();
RoleRepresentation newrole = new RoleRepresentation("ROLE_READ_GROUPS", null, false); // this role already exists in keycloak.
rolesOfUserActualNew.add(newrole);
List<RoleRepresentation> differences = rolesOfUserActual.stream()
.filter(name -> !rolesOfUserActualNew.contains(name))
.collect(Collectors.toList());
List<RoleRepresentation> roleToAdd = new ArrayList();
List<RoleRepresentation> roleToDelete = new ArrayList();
differences.forEach((role) ->
if(rolesOfUserActual.contains(role))
roleToDelete.add(role);
else
roleToAdd.add(role);
);
keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().add(roleToAdd);
keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().remove(roleToDelete);
我不明白为什么更新角色这么复杂(很多列表):(
我认为我没有走好路..
【问题讨论】:
【参考方案1】:在这里找到答案:Comparing two lists and getting differences
CollectionUtils.removeAll(rolesOfUserActual, rolesOfUserActualNew); // roles added
CollectionUtils.removeAll(rolesOfUserActualNew, rolesOfUserActual); //roles deleted
【讨论】:
以上是关于使用 Keycloak Admin Java API 向用户添加角色的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 rest admin api 的情况下以编程方式(java)更新 keycloak 的用户详细信息?
一篇学会java调用Keycloak Admin-cli User和Group Api
一篇学会java调用Keycloak Admin-cli User和Group Api
通过 keycloak admin 客户端在 keycloak 中创建用户返回 IllegalArgumentException