# Keycloak 使用紀錄 近期在接觸Keycloak,Keycloak為實現SSO的一種解決方案工具,本篇會簡易紀錄Keycloak基本概念、設定及如何使用,最後帶入Sample實作。 在了解Keycloak前我們需要對於身分驗證與授權,還有SSO要有一定的認知。如果對於這兩個Part熟悉的,可以直接從第三章開始看。 ## 一、關於身份驗證與授權 系統認證授權為功能環節很重要的第一部分,這部分關係到系統使用的安全性。身份驗證 (Authentication)為系統辨識使用者,而授權則是判定使用者是誰給予什麼使用權限。但更細節的來看,其實他會拆成四個區塊 1. Identification (身分識別) : 簡單來說就是讓系統知道你是誰,例如當您輸入用戶名或電子郵件地址登錄到某個系統時,您其實是在告訴該系統您是誰。 2. Authentication (身分驗證): 讓系統相信你是誰,例如當您輸入密碼、使用指紋、臉部識別或一次性密碼(如簡訊驗證碼)來登錄系統時,您其實是在讓系統相信您確實是該帳戶的持有者。 3. Authorization (授權) : 授權基本上就是種角色分配,一旦用戶被驗證成功,系統會根據用戶的身份分配特定的角色。例如你登入後,授權給你一個開發者角色,相對使用者角色,你可以有更多操作。 4. Access Control (存取控制) : 存取控制為角色可以使用哪些操作設定,假設有一個IT管理系統,系統內有各種資源和功能,包括伺服器管理、程式碼部署、日誌查看等。操作員與開發者權限上就有所不同。例如一般使用者可以重啟伺服器、監控系統健康狀態、查看系統日誌但無法直接更改或部署程式碼可是開發者就可以。 ### ## 二、SSO 簡述 > 透過單一的登入窗口,進行單一的身分驗證,就可以讓許多的服務共同來使用這個驗證結果 假設你在工作中使用三個不同的系統: 1. 郵件系統(Email System) 2. 公司內部網站(Intranet) 3. 報表和數據分析平台(Analytics Platform) 每個系統都需要不同的帳號和密碼。所以你得記住三組不同的登入資訊,並且每次要使用這些平台時都需要進行獨立的登入動作。 這時候 SSO(單一登入)就派上用場了。當你早上第一次來到辦公室,你只需要登入一個「統一的登入介面」,比如說,這個介面是由 Keycloak 管理的。你只需要輸入一組帳號密碼,透過Keycloak驗證身分,就可以自由地訪問三個系統,無須切換平台需要再次切換帳號與密碼。 簡單來說,SSO 是單點登入,能將多個不同的系統串接成單一入口,能減少不同系統都要各自驗證密碼的問題,減少密碼在各系統存放的短板問題,只要使用者通過一次身份驗證,就可以存取所有需要密碼驗證的服務。 簡易範例架構範例如下, - Step1(箭頭1) : 用者首先訪問「Application 01」的 URL 並按下登入按鈕,然後會被引導到 Keycloak 登入頁面。 - Step2: 用戶在 Keycloak 成功登入後,將被重新導向回「Application 01」的主頁。 - Step3(箭頭3): 如果用戶在合理的時間內再次訪問「Application 02」,則不需要重新登入。 箭頭2為當用戶訪問「Application 01」並嘗試登入時(箭頭1),他們將被引導到「KEYCLOAK」的登入頁面(箭頭2)。所以,是的,箭頭2表示用戶直接登入到「KEYCLOAK」這個認證伺服器。  ## Keycloak 一個 OpenSource 方案,提供 SSO 功能,並支援包含 OAuth2, SAML 等協定,這次選用 SAML。 ### 基本物件 Users: 使用者,使用並需要登入系統的物件 Roles: 用來對應權限 Clients: 客戶端,需要接入 Keycloak,並被Keycloak保護的應用和服務 Realms: 領域,領域管理著一批使用者、證照、角色、組等,**一個使用者只能屬於並且能登陸到一個域,域之間是互相獨立隔離的**, 一個域只能管理它下面所屬的使用者。 ## 基本概念 - SAML 安全性聲明標記語言 (SAML) 是一種標準化方法,用於告訴外部應用程式和服務,使用者是他們所聲稱的身分用。從而使單一登入 (SSO) 技術成為可能。 SAML (安全聲明標記語言) 是應用程式用來與 SSO 服務交換身分驗證資訊的通訊協定。 使用 XML 來交換使用者識別資料。SAML 提供了一種方法,對使用者進行一次驗證,然後可將該驗證傳達給多個應用程式,應用程式不需要在其系統上儲存使用者憑證。 SAML 的最新版本是 SAML 2.0。 將 SAML 驗證視為一張身分證:一種顯示某人身分的簡短、標準化方法。譬如,不必進行一系列的 DNA 測試來確認一個人的身分,只需看一眼這個人的身分證便可。 **SAML驗證與使用者授權的差別** - **驗證**是指使用者的身分 - **授權**是指使用者的權限 ### IdP 識別提供者 (IdP) 儲存並管理使用者的數位身分,概念上就是個使用者清單,可以讓 SSO 來檢查使用者。 IdP 可以透過使用者名稱-密碼組合和其他因素檢查使用者身分,或者可能只是簡單地提供一個使用者身分清單,供另一個服務提供者(如:SSO)用來檢查使用者身分。 #### 使用者身份 可由電腦驗證身份的因子,只需要其中一種就可以做 IdP 驗證: - 知道的內容:使用者的帳號密碼 - 擁有的物品:手機 - 生物特徵:指紋、視網膜 ### IdP 如何與 SSO 搭配 在大多數情況下,SSO 和 IdP 是分開的。SSO 服務使用 IdP 檢查使用者身分,但它實際上並不儲存使用者身分。SSO 提供者在使用者登入時透過 IdP 檢查使用者身分。完成此操作后,SSO 可以向任意數量的已連接雲端應用程式驗證使用者身分。 **範例情境**  [節錄自 Cloudflare 參考](https://www.cloudflare.com/zh-tw/learning/access-management/what-is-an-identity-provider/) 外部參考 - [使用Docker建立基本環境](https://blog.miniasp.com/post/2023/04/21/Running-Keycloak-in-development-mode) - [Keycloak refference 1](https://iter01.com/509140.html) - [Keycloak refference 2](https://iter01.com/509140.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up