oauth2.0 授予Keycloak客户端服务帐户创建领域用户的权限,而不使用广泛的manage-users角色

amrnrhlw  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个Web应用程序,它正在利用Keycloak for IdM。
我使用资源所有者密码凭证或直接授权流进行身份验证,它使用对/auth/realms/{realm}/protocol/openid-connect/token的REST API调用而不是浏览器重定向来为用户获取JWT。
我想实现一个类似的工作流程,为注册用户。
查看Keycloak文档,似乎Keycloak Admin API在/auth/admin/realms/{realm}/users中为此公开了一个端点。
要允许客户端与Keycloak Admin API交互,您必须创建一个客户端服务帐户,并将其与具有足够权限的keycloak角色相关联,以管理领域用户。
预期的方法似乎是将特定于manage-users领域的角色应用于客户机服务帐户。这比我想授予客户端的权限要多。
是否有一种方法可以授予客户端服务帐户 * 仅 * 创建新用户的能力,而不是管理用户附带的全套权限?

axr492tv

axr492tv1#

实际上,似乎无法编辑manage-users角色,也无法从控制台创建一个具有更细粒度控制的新角色。查看源代码,您可能需要fork repo并添加预期的行为。
方法似乎是在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.javaRolePermissions.javaGroupPermissions.javaRealmAuth.java文件下。
然后按照官方指南构建您的自定义keycloak发行版:https://github.com/keycloak/keycloak#building-from-source

相关问题