管理用户和角色

Keycloak 提供了全面的用户生命周期管理和细粒度的基于角色的访问控制(RBAC)。用户、角色和组均按 Realm 进行管理。

用户管理

创建用户

Web Console
CLI
  1. 登录到 Keycloak Admin Console,并选择目标 Realm。
  2. 在左侧导航栏中单击 Users。
  3. 单击 Create new user。
  4. 填写必填字段:
字段描述
Username用户在 Realm 内的唯一标识符
Email用户电子邮件地址。如果启用了邮箱登录,则用于登录。
First Name / Last Name显示名称字段
Email Verified如果启用,则跳过邮箱验证步骤
Enabled如果禁用,用户将无法登录
  1. 单击 Create。
  2. 转到 Credentials 选项卡以设置初始密码。

重置用户密码

  1. 在 Admin Console 中,转到 Users 并选择目标用户。
  2. 单击 Credentials 选项卡。
  3. 单击 Reset password。
  4. 输入新密码,并在希望用户在下次登录时修改密码时切换 Temporary。
  5. 单击 Save password。

角色管理

Keycloak 支持两种类型的角色:

角色类型范围使用场景
Realm Roles作用域限定于整个 Realm表示全局应用角色(例如 admin、user)
Client Roles作用域限定于特定客户端表示特定应用的权限(例如 orders:read)

创建 Realm 角色

  1. 在 Admin Console 中,转到 Realm Roles。
  2. 单击 Create role。
  3. 输入 Role name 和可选的 Description。
  4. 单击 Save。

为用户分配角色

  1. 转到 Users 并选择目标用户。
  2. 单击 Role mapping 选项卡。
  3. 单击 Assign role。
  4. 选择要分配的角色,然后单击 Assign。

组管理

Groups 允许您一次性管理多个用户的角色分配。向组分配角色后,所有组成员都会自动继承这些角色。

创建组

  1. 在 Admin Console 中,转到 Groups。
  2. 单击 Create group。
  3. 输入 Name 并单击 Create。
  4. 在该组的 Role Mapping 选项卡中,分配所需的 Realm 或客户端角色。

将用户添加到组

  1. 转到 Users 并选择目标用户。
  2. 单击 Groups 选项卡。
  3. 单击 Join Group,选择组,然后单击 Join。

复合角色

Composite Role 是一个包含其他角色的角色。当用户被分配到复合角色时,他们会继承其中包含的所有角色。这简化了复杂角色层次结构下的权限管理。

创建复合角色:

  1. 创建一个 Realm 角色。
  2. 在该角色的详细视图中,启用 Composite role。
  3. 在 Associated roles 选项卡中,添加子角色。

管理员访问控制

Keycloak 提供细粒度控制,用于管理哪些人可以管理各个 Realm,以及他们可以执行哪些操作。

主节点 Realm 与特定 Realm 管理员

管理员类型范围分配方式
超级管理员对所有 Realm 拥有完全访问权限。定义在 master realm 中。在 master realm 中分配 admin 角色。
Realm 管理员仅对特定 Realm 拥有完全访问权限。在目标 Realm 中,从 realm-management client 分配 realm-admin client 角色。
自定义管理员对 Realm 中的特定操作拥有有限访问权限。从 realm-management client 分配单独的管理员角色。

细粒度管理员角色

每个 Realm 中的 realm-management client 提供了粒度更细的管理员角色。角色遵循 view-* / manage-* 模式——view-* 授予只读访问权限,manage-* 授予完整的 CRUD 访问权限,并且会隐式包含对应的 view-* 权限。

角色权限
view-users查看用户及其属性
manage-users创建、更新和删除用户
query-users最小化用户搜索(仅列表和计数,不访问完整属性)
view-clients查看客户端配置
manage-clients创建、更新和删除客户端
query-clients最小化客户端搜索(仅列出客户端,不访问完整配置)
view-realm查看 Realm 设置
manage-realm修改 Realm 设置
view-events查看登录和管理员事件
manage-events配置事件设置
query-realms最小化 Realm 列表(用于 Admin Console 中的导航)
query-groups最小化组搜索
view-identity-providers查看 Identity Provider 配置
manage-identity-providers创建、更新和删除 Identity Provider
view-authorization查看授权设置
manage-authorization管理授权策略和权限
impersonation冒充用户
create-client创建新客户端(不含完整的 manage-clients 作用域)
Query 与 View 角色

query-* 角色仅提供 Admin Console 导航所需的最小列表/搜索访问权限,而不会授予资源详情的完整读取权限。创建委派管理员账户时,请将 query-* 角色与特定的 manage-* 或 view-* 角色一起分配,这样管理员才能正确浏览控制台。

权限边界

细粒度管理员权限具有以下边界:

  • 委派管理员不能授予自己不具备的角色。拥有 manage-users 但没有 manage-clients 的用户不能分配客户端角色。
  • 委派管理员不能访问其他 Realm,除非他们在那些 Realm 中也具有相应角色。
  • realm-admin 复合角色包含所有单独的管理员角色。仅当需要完整的 Realm 管理权限时才分配它。

创建委派管理员

要创建一个只能管理特定 Realm 中用户的管理员用户:

  1. 在目标 Realm 中创建一个用户。
  2. 转到该用户的 Role mapping 选项卡。
  3. 单击 Assign role > Filter by clients。
  4. 搜索 realm-management。
  5. 分配 view-users、manage-users、query-users 和 query-realms 角色。
  6. 该用户现在可以使用 https://<keycloak-host>/admin/<realm>/console 访问 Admin Console,并且权限受限。
专用 Admin Console

每个 Realm 都有一个专用的 Admin Console URL:https://<keycloak-host>/admin/<realm>/console。委派管理员应使用此 URL,而不是全局 admin console。