開源認證受權管理平臺 Keycloak 初體驗

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

上一篇文章簡單介紹了Keycloak,反響不錯。看來你們都對這個東西感興趣,今天就來進一步的體驗Keycloak,讓咱們對它有一個直觀的認識,而後逐步深刻,把它的設計理念和概念各個擊破。docker

整體思路

由於事先已經知道Keycloak提供了Spring Security的適配器。先獨立把Keycloak的核心概念弄清楚,而後再去研究它如何結合Spring Security的。安全

安裝Keycloak

app

本文的Keycloak版本爲 14.0.0框架

我向來不喜歡在安裝上浪費時間,研究階段能用Docker來安裝是最省心的。ide

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,就進入了管理控制檯。若是你感受英文不爽能夠根據下圖改爲中文:學習

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=中文界面的修改設計

改完以後你隨便點點欄目瞭解一下,想象一下它們各自的功能和做用,這時候你要放輕鬆點不用想的太深就是了解一下全貌。3d

 

Realm

若是你接觸過知名安全框架Shiro相信對這個概念不會陌生。realm是管理用戶和對應應用的空間,有點租戶的味道,可讓不一樣realm之間保持邏輯隔離的能力。code

默認狀況下,Keycloack提供了一個叫Masterrealm,這個Master不承擔具體應用和用戶的管理,它只用來管理其它realm的生命週期。server

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= Master域的管理職能示意圖

登入Masterrealm建立一個自定義域felord.cn

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 建立自定義域

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時須要掌握的一些概念,上面已經提到了realmuser,這裏就再也不贅述了

authentication

識別和驗證用戶的過程。證實「你說的這個你就是你」。

authorization

授予用戶訪問權限的過程。代表「你能夠幹什麼、不能夠幹什麼」。

credentials

證實用戶身份的憑證。多是密碼、一次性密碼、數字證書以及指紋。

roles

角色是RBAC的重要概念,用於代表用戶的身份類型。

user role mapping

用戶角色映射關係。一般一個用戶可能有多個角色,一個角色也能夠對應不一樣的人。

composite roles

複合角色,聽起來很玄乎,其實就是角色的從屬關係或者說繼承關係。B角色從屬於A角色,那麼你擁有了A角色就必定擁有B角色的權限。

groups

用戶組,你能夠將一系列的角色賦予定義好的用戶組,一旦某用戶屬於該用戶組,那麼該用戶將得到對應組的全部角色權限。

clients

客戶端。一般指一些須要向Keycloack請求以認證一個用戶的應用或者服務,甚至能夠說尋求Keycloack保護並在Keycloack上註冊的請求實體都是客戶端。

client adapters

Keycloack爲了支持多語言和跨平臺而設計的適配器,好比適配Java的、適配Python的。有些是內置的實現,有些須要咱們按照Keycloack的抽象定義來實現。後續咱們主要和Spring Boot Adapter打交道。

identity provider

用來認證用戶的服務,簡稱IDPKeycloack自己就是一個IDP。這個相似Spring Security中的AuthenticationProvider接口。

還有一些概念等遇到了會再補充,有點多,先消化消化。

總結

今天這一篇主要對Keycloack進行一個初步的體驗,搭建了一個開發環境供後續的學習,同時對Keycloack的一些核心概念進行了彙總。不過因爲篇幅限制沒有徹底的去梳理一些概念,不過學習都是按部就班的,急不得。自定義realm和用戶都建好了,下一篇我將嘗試用Keycloack來保護Spring Boot應用。

相關文章
相關標籤/搜索