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

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



