我有一个利用Keycloak for IdM的Web应用程序。
我正在使用资源所有者密码凭据或直接授权流程进行身份验证,该流程使用 REST API 调用来/auth/realms/{realm}/protocol/openid-connect/token
而不是浏览器重定向来获取用户 JWT。
我想实现类似的工作流程来注册用户。
查看 Keycloak文档,Keycloak Admin API 似乎在/auth/admin/realms/{realm}/users 处公开了一个端点。
要允许客户端与 Keycloak 管理员 API 交互,您必须创建一个客户端服务帐户,并将其与具有足够权限的 keycloak 角色相关联,以管理领域用户。
对此的预期方法似乎是将特定于管理用户领域的角色应用于客户端服务帐户。这比我想授予客户端的权限要多。
有没有办法只授予客户端服务帐户创建新用户的能力,而不是管理用户附带的完整权限集?
事实上,您似乎无法从控制台编辑manage-users
角色或创建具有更细粒度控制的新角色。查看源代码,您可能必须分叉存储库并添加预期的行为。
方法似乎是在AdminRoles.java
文件中创建一个新变量,例如:
public static String CREATE_USERS = "create-users";
https://github.com/keycloak/keycloak/blob/d9b271c22a170e003f328873a6a05a2665e7f79b/server-spi-private/src/main/java/org/keycloak/models/AdminRoles.java#L46
然后只在源代码中用户创建用MANAGER_USERS
枚举的地方用,好像在UserPermissions.java
、RolePermissions.java
、GroupPermissions.java
、RealmAuth.java
文件下。
然后按照官方指南构建您的自定义钥匙斗篷发行版: https://github.com/keycloak/keycloak#building-from-source