概述
Keycloak使用realm(域)的概念来组织应用的管理:
- 各个realm之间是相互独立的
- 在realm里可以定义client(客户端,即应用)、user(用户)、group(组)三类实体
- 在client中还可以启用授权,定义role(角色)、policy(策略)、resource(资源)、permission(权限)等实体来进行细粒度的权限控制
可以看出,在同一个realm里,user和group是由各个client共享的,这是实现单点登录的基础。
使用
进入控制台后可以看到很多菜单:
我们从新建realm开始逐步了解这些功能。
1. 新建realm
新建realm的时候只需要提供一个名称:
新建的时候可以通过文件导入resource,因为更常用的是通过Keycloak的RESTful API来管理资源,故这里不做详细介绍。
2. 域设置
在域设置里可以配置一些全局参数,一般需要额外配置的在Sessions选项卡下,可以根据需要配置用户(SSO Session)和客户端(Client Session)会话的有效期:
Session Idle是指允许会话空闲的最大时长,即当用户/客户端超过该时长未发起任何请求时,会话失效,下次请求则要求重新认证。
Session Max是指允许会话连接的最大时长,即便用户/客户端一直未空闲,连接超过该时长时也会使会话失效,下次请求则要求重新认证。
3. 域认证设置
一般使用默认配置即可,笔者还没研究该内容。
4. 用户管理
在Users可以对用户进行增删查改,创建时我们一般只提供用户登录账号和名称就可以了:
值得注意的是,Keycloak还支持对用户设置Required user actions,即用户登录完成后需要进行的动作。可以选择的动作有Update Password(修改密码)、Update Profile(修改个人信息)、Verify Email(验证邮箱)等。
用户创建完成后,可以对用户做进一步设置。
4.1 Attributes
用户的默认属性只有Username、Email、First Name、Last Name,如果需要维护更多数据,可以在Attributes选项卡下进行自定义。
4.2 Credentials
如果允许创建的用户进行登录,则需要在Credentials选项卡下设置登录密码:
Temporary是一个很有用的属性,在一些要求定期修改密码的使用场景里,可以通过该属性要求用户修改密码。
4.3 Groups
在Groups选项卡中可以管理用户加入的分组。
4.4 Role mapping
在Role mapping选项卡中,可以设置用户的角色。既可以设置域角色(Filter by roles)也可以设置客户端定义的角色(Filter by clients):
5. 分组管理
在Groups中可以对分组进行增删查改,并管理用户的加入和退出。在每个分组中,可以有子分组和成员,从而形成一个树形结构,故而在企业应用中,分组的概念常可以对应于组织架构(分公司、部门、小组)。
创建分组时我们只需要提供一个名称即可:
分组创建完成后,可以对分组做进一步设置。
5.1 Attributes
分组同样可以使用Attributes选项卡自定义属性。
5.2 Child Groups
在Child Groups选项卡下可以创建子分组,形成分组的层级关系。
5.3 Members
在Members选项卡下可以将用户加入分组,也可以退出分组。
5.4 Role mapping
分组同样可以设置域角色和客户端角色,这些角色将赋予组的成员。