Try   HackMD
tags: keycloak Tool

身份驗證與授權與Keycloak

一、關於身份驗證與授權

身份驗證和授權是系統安全性非常重要的環節。身份驗證用於識別使用者是誰,而授權則賦予使用者某些特定權限。更具體來說,這整個過程可以分為四個部分:

  1. 身分識別 (Identification):這是一個讓系統知道你是誰的過程。例如,當你使用用戶名或電子郵件地址登入系統時,就是進行身分識別。

  2. 身分驗證 (Authentication):這個過程讓系統確認你確實是你聲稱的那個人。通常是通過輸入密碼、使用FaceID或OTP來完成的。

  3. 授權 (Authorization):這涉及到角色分配。根據你的角色,系統會賦予你不同的權限。例如,一個“編輯者”角色可能有編輯內容的權限,而一個“閱讀者”角色則只能閱讀。

  4. 存取控制 (Access Control):這涉及到具體的操作權限。比如,在一個IT管理系統中,一個普通使用者可能可以重啟伺服器和查看系統日誌,但不能部署新的程式碼。然而,一個開發者則可能有這樣的權限。

在你登入系統,輸入帳號密碼為身分識別與身分驗證,系統驗證完後,會根據身分授予角色。至於此角色權限則可以在後台系統上設置。至於這部分的詳細實做概念牽扯還是蠻多的會再找時間針對這部分做一個細部講解。

1. 身分識別驗證與授權簡易實作

了解這些基礎概念後,我們可以考慮如何手動實現這四個部分。

  • 身分識別 (Identification) : 最常見的實現方式是透過一個使用者註冊頁面,讓使用者輸入基本資料,例如用戶名和密碼。這些信息會被存儲在後端的資料庫中(密碼會被加密)。

  • 身分驗證 (Authentication) : 驗證的方法有多種。

    • 密碼驗證 : 簡單地說,就是將輸入的密碼與資料庫中存儲的密碼進行比對。
    • 多因素驗證 : 二次驗證,例如OTP、FaceID,或是手機&Mail驗證
    • Session/Token管理 : 用戶登入後,系統會生成一個session或token並發送給用戶。後續的所有請求都需要這個token以確認身份。
  • 授權 (Authorization) : 這部分簡易實作基本上會有三部份

    • 角色管理:在資料庫中設計一個角色和權限的模型。例如,每個使用者可以有一個或多個角色,每個角色有不同的權限。
    • 權限檢查:每次使用者請求某個資源或操作時,檢查他們的角色是否有相應的權限。
    • API設計:設計API時,確保每個API端點都有適當的授權檢查。
  • 存取控制 (Access Control)

    • 基於角色的存取控制 (RBAC):根據使用者的角色決定他們可以訪問的資源。
    • 細緻的權限設定:允許系統管理者為每個角色定制細緻的權限,例如某角色只能讀取資料但不能編輯。
  • 其他考慮

    • 日誌和監控:記錄所有的登錄嘗試、授權請求等,以便日後分析和審計。
    • 資料庫安全性:確保資料庫有適當的加密和備份策略。
    • 定期檢查和更新:隨著時間的推移,可能會出現新的安全威脅。定期檢查和更新你的身份驗證和授權策略,以確保它們始終是安全的。

2. 身分識別驗證、授權與Keycloak

通過使用Keycloak,我們能夠更為高效地實現身分識別、身分驗證、授權,以及存取控制等功能。

  • 身分識別 (Identification)

    • 不僅提供使用者註冊功能,讓使用者可以用基本資訊,比如用戶名或電子郵件進行註冊,還支持多種社交登入方式,如Google或Facebook。
  • 身分驗證 (Authentication

    • 支援多種身分驗證方法,包括密碼、OTP、FaceID等,也提供Token管理,當使用者成功登入後,Keycloak 會發放一個 token,使用者可以使用此 token 來存取其他受保護的資源。
  • 授權 (Authorization)

    • 可以定義多個角色,並為每個角色分配不同的權限,使用者可以被分配到一個或多個角色,這些角色決定了使用者可以訪問哪些資源。
  • 存取控制 (Access Control)

    • 支援基於角色的存取控制 (RBAC)。你可以設定哪些角色可以訪問哪些資源。

一般來說,要全面實施這四大功能通常需要大量的時間和資源。開發者不只需要寫大量的程式碼,還必須維護系統的安全性、效能,並確保與其他系統的良好整合。有了Keycloak,這一切都變得相對簡單。