上一篇文章簡單介紹了Keycloak,反響不錯。看來大家都對這個東西感興趣,今天就來進一步的體驗Keycloak,讓我們對它有一個直觀的認識,然後逐步深入,把它的設計理念和概念各個擊破。
總體思路
因爲事先已經知道Keycloak提供了Spring Security的適配器。先獨立把Keycloak的核心概念弄清楚,然後再去研究它如何結合Spring Security的。
安裝Keycloak
本文的Keycloak版本爲
14.0.0
。
我向來不喜歡在安裝上浪費時間,研究階段能用Docker來安裝是最省心的:
docker run -d -p 8011:8080 --name keycloak-server -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
執行上述命令安裝Keycloak,成功後打開http://localhost:8011/auth/admin
輸入賬號admin
和密碼admin
,就進入了管理控制檯。如果你感覺英文不爽可以根據下圖改成中文:
改完之後你隨便點點欄目瞭解一下,想象一下它們各自的功能和作用,這時候你要放輕鬆點不用想的太深就是了解一下全貌。
Realm
如果你接觸過知名安全框架Shiro相信對這個概念不會陌生。realm
是管理用戶和對應應用的空間,有點租戶的味道,可以讓不同realm
之間保持邏輯隔離的能力。
默認情況下,Keycloack提供了一個叫Master
的realm
,這個Master
不承擔具體應用和用戶的管理,它只用來管理其它realm
的生命週期。
登入Master
的realm
創建一個自定義域felord.cn
。
User
User
是能夠登錄到應用系統的實體,其實可以理解爲賬戶。他們可以擁有與自己相關的屬性,例如電子郵件、用戶名、地址、電話號碼和生日。可以爲他們分配組成員身份併爲其分配特定的角色。Keycloak
中的User
都有他們從屬的realm
。接下來在我上面的自定義域felord.cn
中新建一個用戶,步驟爲:
- 菜單欄找到管理->用戶,然後打開添加用戶。
- 鍵入唯一的必填項
用戶名(username)
。 - 開啓(
ON
)郵件認證(Email Verified),然後保存。 - 點擊憑據(Credentials)選項卡爲新用戶設置臨時密碼。此密碼是臨時的,用戶將需要在第一次登錄時更改它。如果您更喜歡創建永久密碼,請將臨時開關切換到關閉並單擊設置密碼。
然後註銷當前用戶admin
併到http://localhost:8011/auth/realms/felord.cn/account
以剛創建的用戶felord
的身份登錄到felord.cn
域。
有沒有發現登錄鏈接的特點?
到這裏一個創建realm
和賬戶的流程就熟悉完了,不過我相信大多數同學看到這裏還是懵逼的。怎麼就手動了呢?不要急後面會結合代碼來實現上述的流程以及更加符合應用場景的流程。
Keycloak的核心概念
接下來是我們在使用Keycloak時需要掌握的一些概念,上面已經提到了realm
和user
,這裏就不再贅述了
authentication
識別和驗證用戶的過程。證明“你說的這個你就是你”。
authorization
授予用戶訪問權限的過程。標明“你可以幹什麼、不可以幹什麼”。
credentials
證明用戶身份的憑證。可能是密碼、一次性密碼、數字證書以及指紋。
roles
角色是RBAC的重要概念,用於表明用戶的身份類型。
user role mapping
用戶角色映射關係。通常一個用戶可能有多個角色,一個角色也可以對應不同的人。
composite roles
複合角色,聽起來很玄乎,其實就是角色的從屬關係或者說繼承關係。 B
角色從屬於A
角色,那麼你擁有了A
角色就一定擁有B
角色的權限。
groups
用戶組,你可以將一系列的角色賦予定義好的用戶組,一旦某用戶屬於該用戶組,那麼該用戶將獲得對應組的所有角色權限。
clients
客戶端。通常指一些需要向keycloak請求以認證一個用戶的應用或者服務,甚至可以說尋求keycloak保護並在keycloak上註冊的請求實體都是客戶端。
client adapters
keycloak爲了支持多語言和跨平臺而設計的適配器,比如適配Java的、適配Python的。有些是內置的實現,有些需要我們按照keycloak的抽象定義來實現。後續我們主要和Spring Boot Adapter打交道。
identity provider
用來認證用戶的服務,簡稱IDP
。keycloak本身就是一個IDP
。這個類似Spring Security中的AuthenticationProvider
接口。
還有一些概念等遇到了會再補充,有點多,先消化消化。
總結
今天這一篇主要對keycloak進行一個初步的體驗,搭建了一個開發環境供後續的學習,同時對keycloak的一些核心概念進行了彙總。不過由於篇幅限制沒有完全的去梳理一些概念,不過學習都是循序漸進的,急不得。自定義realm
和用戶都建好了,下一篇我將嘗試用keycloak來保護Spring Boot應用。業餘時間,碼字不易,還請多多關注,大力支持一下作者。
關注公衆號:碼農小胖哥,獲取更多資訊