前几篇我和大家一起对Keycloak进行了粗略的了解。随着逐步的了解,我发现进入了一个误区,原本以为Spring Security整合Keycloak的重心在于Spring Security这一方面,事实上,我发现Keycloak关于Spring Security的Adapter的几个过滤器并没有可操作的空间,或许需要等弄明白了Keycloak本身之后才能有突破。所以今天我要弄明白的是Keycloak中的Realm。

Realm

Realm翻译成中文为领域。用来逻辑隔离一些特定空间,有点多租户的感觉,不同的Realm之间互相隔离,有各自的特色配置,互不影响。

什么时候用到Realm

当特定数量用户之间需要隔离的时候、一系列服务需要统一进行资源管理的时候就用到了Realm。可能我描述的不够全面,至少目前我能感觉到的就是这样。

realm包含的核心概念

比如我们需要开发一个应用,应用部署域名为felord.cn。我们可以这么定义一个名称为felord.cn的Realm,来管理该应用的角色、资源、和客户端,客户端开发可以专注于业务。整个Keycloak就像一个开放平台一样,集中式管理Realm的生命周期,这些Realm之间可以在OIDC协议下互联互通。

Master Realm

如果你看过之前我关于Keycloak的文章,可能会记得第一次启动Keycloak时会接触一个叫Master的Realm。这个是Keycloak内建的Realm,它的作用有点类似Linux中的root用户,主要是管理其它的Realm,Master Realm中的管理员账户有权查看和管理在Keycloak服务器实例上创建的任何其它Realm。

而且你会发现Master Realm创建的领域实际上是Master Realm的一个客户端,甚至它自己都是自己的客户端,而且名称遵循-realm。

而且你会发现Master Realm中创建的用户可以赋予其独有的两种角色:

  • admin 超级管理员,拥有管理Keycloak服务器上任何realm的完全访问权限。
  • create realm 拥有该角色就可以创建realm并获得该realm的完全管理权。

建议Master Realm用来管理其它Realm而不参与具体的业务。

其它Realm

其它Realm是指用Master创建的Realm。创建其它Realm非常简单,通过Master Realm的管理员即可创建。创建成功会有一些选项可供配置,但是一般情况下使用默认配置即可。

设置Realm管理账户

为前面我初始化的Realmfelord.cn创建独立的管理员账户有两种方式。

使用Master用户管理

我们在Master Realm中建立一个用户,并在其角色映射中剥夺admin和create-realm角色,同时在Client Roles中选中felord.cn-realm 把该客户端的所有角色都赋予建立的用户。例如:

这个用户属于Master的用户,但是管理着felord.cnRealm。你可以通过下面的格式的链接进行控制台管理操作:

  1. http://<serverurl>/auth/admin/master/console/#/realms/{realm-name

使用领域客户端用户管理

另一种方法是在felord.cn领域下建立一个用户,把其客户端realm-management的所有客户端角色赋予给该用户。这个用户属于felord.cn,因此只能通过以下链接登录管理控制台管理该领域:

  1. http://<serverurl>/auth/admin/{realm-name}/console 

一个用户只能从属于一个Realm。

扩展

Keycloak Admin Client是通过API操作管理Realm的一个客户端工具,我在上一篇已经介绍过了。结合本篇的一些概念可能你会更加深刻的理解如果操作管理Realm。

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】