OAuth2 服务器Keycloak中的Realm
前几篇我和大家一起对Keycloak进行了粗略的了解。随着逐步的了解,我发现进入了一个误区,原本以为Spring Security整合Keycloak的重心在于Spring Security这一方面,事实上,我发现Keycloak关于Spring Security的Adapter的几个过滤器并没有可操作的空间,或许需要等弄明白了Keycloak本身之后才能有突破。所以今天我要弄明白的是Keycloak中的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 name>-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.cn
Realm。你可以通过下面的格式的链接进行控制台管理操作:
http://<serverurl>/auth/admin/master/console/#/realms/{realm-name}
使用领域客户端用户管理
另一种方法是在felord.cn
领域下建立一个用户,把其客户端realm-management
的所有客户端角色赋予给该用户。这个用户属于felord.cn
,因此只能通过以下链接登录管理控制台管理该领域:
http://<serverurl>/auth/admin/{realm-name}/console
❝
一个用户只能从属于一个Realm。
扩展
Keycloak Admin Client是通过API操作管理Realm的一个客户端工具,我在上一篇已经介绍过了。结合本篇的一些概念可能你会更加深刻的理解如果操作管理Realm。
往期推荐