OAuth2 服務(wù)器Keycloak中的Realm

前幾篇我和大家一起對(duì)Keycloak進(jìn)行了粗略的了解。隨著逐步的了解,我發(fā)現(xiàn)進(jìn)入了一個(gè)誤區(qū),原本以為Spring Security整合Keycloak的重心在于Spring Security這一方面,事實(shí)上,我發(fā)現(xiàn)Keycloak關(guān)于Spring Security的Adapter的幾個(gè)過(guò)濾器并沒有可操作的空間,或許需要等弄明白了Keycloak本身之后才能有突破。所以今天我要弄明白的是Keycloak中的Realm。
Realm
Realm翻譯成中文為領(lǐng)域。用來(lái)邏輯隔離一些特定空間,有點(diǎn)多租戶的感覺,不同的Realm之間互相隔離,有各自的特色配置,互不影響。
什么時(shí)候用到Realm
當(dāng)特定數(shù)量用戶之間需要隔離的時(shí)候、一系列服務(wù)需要統(tǒng)一進(jìn)行資源管理的時(shí)候就用到了Realm??赡芪颐枋龅牟粔蛉?,至少目前我能感覺到的就是這樣。
比如我們需要開發(fā)一個(gè)應(yīng)用,應(yīng)用部署域名為felord.cn。我們可以這么定義一個(gè)名稱為felord.cn的Realm,來(lái)管理該應(yīng)用的角色、資源、和客戶端,客戶端開發(fā)可以專注于業(yè)務(wù)。整個(gè)Keycloak就像一個(gè)開放平臺(tái)一樣,集中式管理Realm的生命周期,這些Realm之間可以在OIDC協(xié)議下互聯(lián)互通。
Master Realm
如果你看過(guò)之前我關(guān)于Keycloak的文章,可能會(huì)記得第一次啟動(dòng)Keycloak時(shí)會(huì)接觸一個(gè)叫Master的Realm。這個(gè)是Keycloak內(nèi)建的Realm,它的作用有點(diǎn)類似Linux中的root用戶,主要是管理其它的Realm,Master Realm中的管理員賬戶有權(quán)查看和管理在Keycloak服務(wù)器實(shí)例上創(chuàng)建的任何其它Realm。
而且你會(huì)發(fā)現(xiàn)Master Realm創(chuàng)建的領(lǐng)域?qū)嶋H上是Master Realm的一個(gè)客戶端,甚至它自己都是自己的客戶端,而且名稱遵循<realm name>-realm。
而且你會(huì)發(fā)現(xiàn)Master Realm中創(chuàng)建的用戶可以賦予其獨(dú)有的兩種角色:
admin 超級(jí)管理員,擁有管理Keycloak服務(wù)器上任何realm的完全訪問權(quán)限。 create realm 擁有該角色就可以創(chuàng)建realm并獲得該realm的完全管理權(quán)。
?
建議Master Realm用來(lái)管理其它Realm而不參與具體的業(yè)務(wù)。
其它Realm
其它Realm是指用Master創(chuàng)建的Realm。創(chuàng)建其它Realm非常簡(jiǎn)單,通過(guò)Master Realm的管理員即可創(chuàng)建。創(chuàng)建成功會(huì)有一些選項(xiàng)可供配置,但是一般情況下使用默認(rèn)配置即可。
設(shè)置Realm管理賬戶
為前面我初始化的Realmfelord.cn創(chuàng)建獨(dú)立的管理員賬戶有兩種方式。
使用Master用戶管理
我們?cè)贛aster Realm中建立一個(gè)用戶,并在其角色映射中剝奪admin和create-realm角色,同時(shí)在Client Roles中選中felord.cn-realm 把該客戶端的所有角色都賦予建立的用戶。例如:
這個(gè)用戶屬于Master的用戶,但是管理著felord.cnRealm。你可以通過(guò)下面的格式的鏈接進(jìn)行控制臺(tái)管理操作:
http://<serverurl>/auth/admin/master/console/#/realms/{realm-name}
使用領(lǐng)域客戶端用戶管理
另一種方法是在felord.cn領(lǐng)域下建立一個(gè)用戶,把其客戶端realm-management的所有客戶端角色賦予給該用戶。這個(gè)用戶屬于felord.cn,因此只能通過(guò)以下鏈接登錄管理控制臺(tái)管理該領(lǐng)域:
http://<serverurl>/auth/admin/{realm-name}/console
?
一個(gè)用戶只能從屬于一個(gè)Realm。
擴(kuò)展
Keycloak Admin Client是通過(guò)API操作管理Realm的一個(gè)客戶端工具,我在上一篇已經(jīng)介紹過(guò)了。結(jié)合本篇的一些概念可能你會(huì)更加深刻的理解如果操作管理Realm。
往期推薦



