開源認(rèn)證授權(quán)管理平臺(tái)Keycloak初體驗(yàn)
上一篇文章簡單介紹了Keycloak,反響不錯(cuò)??磥泶蠹叶紝?duì)這個(gè)東西感興趣,今天就來進(jìn)一步的體驗(yàn)Keycloak,讓我們對(duì)它有一個(gè)直觀的認(rèn)識(shí),然后逐步深入,把它的設(shè)計(jì)理念和概念各個(gè)擊破。
總體思路
因?yàn)槭孪纫呀?jīng)知道Keycloak提供了Spring Security的適配器。先獨(dú)立把Keycloak的核心概念弄清楚,然后再去研究它如何結(jié)合Spring Security的。
安裝Keycloak
本文的Keycloak版本為 14.0.0。
我向來不喜歡在安裝上浪費(fèi)時(shí)間,研究階段能用Docker來安裝是最省心的。
- docker run -d -p 8011:8080 --name keycloak-server -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
執(zhí)行上述命令安裝Keycloak,成功后打開http://localhost:8011/auth/admin輸入賬號(hào)admin和密碼admin,就進(jìn)入了管理控制臺(tái)。如果你感覺英文不爽可以根據(jù)下圖改成中文:
中文界面的修改
改完之后你隨便點(diǎn)點(diǎn)欄目了解一下,想象一下它們各自的功能和作用,這時(shí)候你要放輕松點(diǎn)不用想的太深就是了解一下全貌。
Realm
如果你接觸過知名安全框架Shiro相信對(duì)這個(gè)概念不會(huì)陌生。realm是管理用戶和對(duì)應(yīng)應(yīng)用的空間,有點(diǎn)租戶的味道,可以讓不同realm之間保持邏輯隔離的能力。
默認(rèn)情況下,Keycloack提供了一個(gè)叫Master的realm,這個(gè)Master不承擔(dān)具體應(yīng)用和用戶的管理,它只用來管理其它realm的生命周期。
Master域的管理職能示意圖
登入Master的realm創(chuàng)建一個(gè)自定義域felord.cn。
創(chuàng)建自定義域
User
User是能夠登錄到應(yīng)用系統(tǒng)的實(shí)體,其實(shí)可以理解為賬戶。他們可以擁有與自己相關(guān)的屬性,例如電子郵件、用戶名、地址、電話號(hào)碼和生日。可以為他們分配組成員身份并為其分配特定的角色。Keycloak中的User都有他們從屬的realm。接下來在我上面的自定義域felord.cn中新建一個(gè)用戶,步驟為:
- 菜單欄找到管理->用戶,然后打開添加用戶。
- 鍵入唯一的必填項(xiàng)用戶名(username)。
- 開啟(ON)郵件認(rèn)證(Email Verified(,然后保存。
- 點(diǎn)擊憑據(jù)(Credentials)選項(xiàng)卡為新用戶設(shè)置臨時(shí)密碼。此密碼是臨時(shí)的,用戶將需要在第一次登錄時(shí)更改它。如果您更喜歡創(chuàng)建永久密碼,請(qǐng)將臨時(shí)開關(guān)切換到關(guān)閉并單擊設(shè)置密碼。
然后注銷當(dāng)前用戶admin并到http://localhost:8011/auth/realms/felord.cn/account以剛創(chuàng)建的用戶felord的身份登錄到felord.cn域。
有沒有發(fā)現(xiàn)登錄鏈接的特點(diǎn)?
到這里一個(gè)創(chuàng)建realm和賬戶的流程就熟悉完了,不過我相信大多數(shù)同學(xué)看到這里還是懵逼的。怎么就手動(dòng)了呢?不要急后面會(huì)結(jié)合代碼來實(shí)現(xiàn)上述的流程以及更加符合應(yīng)用場(chǎng)景的流程。
Keycloak的核心概念
接下來是我們?cè)谑褂肒eycloak時(shí)需要掌握的一些概念,上面已經(jīng)提到了realm和user,這里就不再贅述了
authentication
識(shí)別和驗(yàn)證用戶的過程。證明“你說的這個(gè)你就是你”。
authorization
授予用戶訪問權(quán)限的過程。表明“你可以干什么、不可以干什么”。
credentials
證明用戶身份的憑證??赡苁敲艽a、一次性密碼、數(shù)字證書以及指紋。
roles
角色是RBAC的重要概念,用于表明用戶的身份類型。
user role mapping
用戶角色映射關(guān)系。通常一個(gè)用戶可能有多個(gè)角色,一個(gè)角色也可以對(duì)應(yīng)不同的人。
composite roles
復(fù)合角色,聽起來很玄乎,其實(shí)就是角色的從屬關(guān)系或者說繼承關(guān)系。B角色從屬于A角色,那么你擁有了A角色就一定擁有B角色的權(quán)限。
groups
用戶組,你可以將一系列的角色賦予定義好的用戶組,一旦某用戶屬于該用戶組,那么該用戶將獲得對(duì)應(yīng)組的所有角色權(quán)限。
clients
客戶端。通常指一些需要向Keycloack請(qǐng)求以認(rèn)證一個(gè)用戶的應(yīng)用或者服務(wù),甚至可以說尋求Keycloack保護(hù)并在Keycloack上注冊(cè)的請(qǐng)求實(shí)體都是客戶端。
client adapters
Keycloack為了支持多語言和跨平臺(tái)而設(shè)計(jì)的適配器,比如適配Java的、適配Python的。有些是內(nèi)置的實(shí)現(xiàn),有些需要我們按照Keycloack的抽象定義來實(shí)現(xiàn)。后續(xù)我們主要和Spring Boot Adapter打交道。
identity provider
用來認(rèn)證用戶的服務(wù),簡稱IDP。Keycloack本身就是一個(gè)IDP。這個(gè)類似Spring Security中的AuthenticationProvider接口。
還有一些概念等遇到了會(huì)再補(bǔ)充,有點(diǎn)多,先消化消化。
總結(jié)
今天這一篇主要對(duì)Keycloack進(jìn)行一個(gè)初步的體驗(yàn),搭建了一個(gè)開發(fā)環(huán)境供后續(xù)的學(xué)習(xí),同時(shí)對(duì)Keycloack的一些核心概念進(jìn)行了匯總。不過由于篇幅限制沒有完全的去梳理一些概念,不過學(xué)習(xí)都是循序漸進(jìn)的,急不得。自定義realm和用戶都建好了,下一篇我將嘗試用Keycloack來保護(hù)Spring Boot應(yīng)用。業(yè)余時(shí)間,碼字不易,還請(qǐng)多多關(guān)注,大力支持一下作者。
本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)小胖哥公眾號(hào)。