概述

Keycloak使用realm(域)的概念来组织应用的管理:

  1. 各个realm之间是相互独立的
  2. 在realm里可以定义client(客户端,即应用)、user(用户)、group(组)三类实体
  3. 在client中还可以启用授权,定义role(角色)、policy(策略)、resource(资源)、permission(权限)等实体来进行细粒度的权限控制

可以看出,在同一个realm里,user和group是由各个client共享的,这是实现单点登录的基础。

使用

进入控制台后可以看到很多菜单:

keycloak配置OAuth2 resource server keycloak scope_java


我们从新建realm开始逐步了解这些功能。

1. 新建realm

新建realm的时候只需要提供一个名称:

keycloak配置OAuth2 resource server keycloak scope_客户端_02

keycloak配置OAuth2 resource server keycloak scope_修改密码_03


新建的时候可以通过文件导入resource,因为更常用的是通过Keycloak的RESTful API来管理资源,故这里不做详细介绍。

2. 域设置

在域设置里可以配置一些全局参数,一般需要额外配置的在Sessions选项卡下,可以根据需要配置用户(SSO Session)和客户端(Client Session)会话的有效期:

keycloak配置OAuth2 resource server keycloak scope_客户端_04


Session Idle是指允许会话空闲的最大时长,即当用户/客户端超过该时长未发起任何请求时,会话失效,下次请求则要求重新认证。

Session Max是指允许会话连接的最大时长,即便用户/客户端一直未空闲,连接超过该时长时也会使会话失效,下次请求则要求重新认证。

3. 域认证设置

一般使用默认配置即可,笔者还没研究该内容。

4. 用户管理

Users可以对用户进行增删查改,创建时我们一般只提供用户登录账号和名称就可以了:

keycloak配置OAuth2 resource server keycloak scope_修改密码_05


值得注意的是,Keycloak还支持对用户设置Required user actions,即用户登录完成后需要进行的动作。可以选择的动作有Update Password(修改密码)、Update Profile(修改个人信息)、Verify Email(验证邮箱)等。

用户创建完成后,可以对用户做进一步设置。

4.1 Attributes

用户的默认属性只有UsernameEmailFirst NameLast Name,如果需要维护更多数据,可以在Attributes选项卡下进行自定义。

4.2 Credentials

如果允许创建的用户进行登录,则需要在Credentials选项卡下设置登录密码:

keycloak配置OAuth2 resource server keycloak scope_选项卡_06


Temporary是一个很有用的属性,在一些要求定期修改密码的使用场景里,可以通过该属性要求用户修改密码。

4.3 Groups

Groups选项卡中可以管理用户加入的分组。

4.4 Role mapping

Role mapping选项卡中,可以设置用户的角色。既可以设置域角色(Filter by roles)也可以设置客户端定义的角色(Filter by clients):

keycloak配置OAuth2 resource server keycloak scope_选项卡_07

5. 分组管理

Groups中可以对分组进行增删查改,并管理用户的加入和退出。在每个分组中,可以有子分组和成员,从而形成一个树形结构,故而在企业应用中,分组的概念常可以对应于组织架构(分公司、部门、小组)。

创建分组时我们只需要提供一个名称即可:

keycloak配置OAuth2 resource server keycloak scope_客户端_08


分组创建完成后,可以对分组做进一步设置。

5.1 Attributes

分组同样可以使用Attributes选项卡自定义属性。

5.2 Child Groups

Child Groups选项卡下可以创建子分组,形成分组的层级关系。

5.3 Members

Members选项卡下可以将用户加入分组,也可以退出分组。

5.4 Role mapping

分组同样可以设置域角色和客户端角色,这些角色将赋予组的成员。