java - Keycloak:使用 Java API 客户端将客户端角色添加到服务帐户角色
问题描述
我想为现有 Keycloak 客户端的服务帐户添加客户端角色(在此客户端上启用了服务用户)。我设法通过网络面板做到了这一点(见截图)。
但是,我需要使用 Keycloak Java API 客户端进行此角色分配。我知道如何连接客户端和 Keycloak Java 客户端的一般功能。
具体来说,我想将客户端角色realm-management.view-users和realm-managment.query-users添加到客户端“平台管理”的服务帐户中。
解决方案
好吧,我自己想通了。如果您不知道 API 功能如何,真正有帮助的是打开浏览器的开发者控制台,打开 Keycloak Web 面板,执行操作,然后查看网络选项卡中的 API 调用。
RealmResource realm = keycloak.realm("realmName");
String realmManagementId = realm.clients().findByClientId("realm-management").get(0).getId();
String platformAdministrationId = realm.clients().findByClientId("platform-administration").get(0).getId();
String serviceUserId = realm.clients().get(platformAdministrationId).getServiceAccountUser().getId();
List<RoleRepresentation> availableRoles = realm.users().get(serviceUserId).roles().clientLevel(realmManagementId).listAvailable();
List<RoleRepresentation> rolesToAssign = availableRoles.stream().filter(r -> "view-users".equalsIgnoreCase(r.getName()) || "query-users".equalsIgnoreCase(r.getName())).collect( Collectors.toList());
realm.users().get(serviceUserId).roles().clientLevel(realmManagementId).add(rolesToAssign);
推荐阅读
- javascript - AngularJS上的量角器-登录页面更改后“脚本超时:11秒内未收到结果”
- mysql - 将 SQL 服务器查询转换为其等效的 MySQL 以进行触发器
- c - 保护共享数据并共享同一个堆栈
- python - CPLEX python API 热启动
- javascript - 这个使用表单提交来满足变量的计算器不起作用
- swift - 可选在 UITableViewCell.xib 中找到 Nil
- ios - 无法分配类型“字典”的值
.Keys' 输入 'String' - angular - 在前端设置 cookie ( angular )
- applescript - AppleScript:如何删除 POSIX 路径?
- java - 在纯 Java 中读取图像、修改元数据和重写图像