keycloak入門瞭解

keycloak 是是一個開源軟件,源碼地址是:https://github.com/keycloak/keycloak/

Keycloak支持細粒度的授權策略,並且能夠組合不同的訪問控制機制,例如:

  • Attribute-based access control (ABAC): 基於屬性的安全控制
  • Role-based access control (RBAC): 基於角色的安全控制
  • User-based access control (UBAC): 基於用戶的安全控制
  • Context-based access control (CBAC): 基於上下文的安全控制
  • Rule-based access control: 基於規則的安全控制
    • 使用Javascript
    • 使用 JBoss Drools
  • Time-based access control: 基於時間的安全控制
  • 通過策略提供程序服務提供程序接口(SPI)支持自定義訪問控制機制(ACMs)

Keycloak基於一組管理UI和RESTful API,爲受保護資源和作用域創建權限,將這些權限與授權策略相關聯以及在應用程序和服務中強制執行授權決策的必要方法。

資源服務器(爲受保護資源提供服務的應用程序或服務)通常依賴某種信息來決定是否應該向受保護資源授予訪問權限。
對於基於RESTful的資源服務器,該信息通常從安全令牌獲取,通常在每次請求發送到服務器時作爲承載令牌發送。
對於依賴會話對用戶進行身份驗證的Web應用程序,該信息通常存儲在用戶的會話中,並從那裏爲每個請求檢索。

通常,資源服務器僅基於基於角色的訪問控制(RBAC)執行授權決策,其中,針對映射到這些相同資源的角色檢查授予嘗試訪問受保護資源的用戶的角色。
雖然角色非常有用並且被應用程序使用,但它們也有一些限制:

  • 資源和角色緊密耦合,角色更改(例如添加,刪除或更改訪問上下文)可能會影響多個資源
  • 對安全性要求的更改可能意味着對應用程序代碼進行深度更改以反映這些更改
  • 根據您的應用程序大小,角色管理可能變得困難且容易出錯
  • 不是最靈活的訪問控制機制。角色不能代表你是誰,缺乏上下文信息。如果您已被授予角色,則您至少擁有一些訪問權限。

考慮到今天我們需要考慮用戶分佈在不同地區,不同本地策略,使用不同設備以及對信息共享的高需求的異構環境,Keycloak授權服務可以幫助您提高應用程序和服務的授權功能通過提供:

  • 使用細粒度授權策略和不同訪問控制機制的資源保護
  • 資源,權限的策略的集中管理
  • 集中的策略決策點
  • 基於REST的授權服務的REST安全性
  • 授權工作流程和用戶管理的訪問權限
  • 有助於避免跨項目(並重新部署)代碼複製並快速適應安全要求變化的基礎架構

架構

image
從設計角度來看,授權服務基於一組明確定義的授權模式,提供以下功能:

  • 策略管理點(Policy Administration Point/PAP)

    提供基於Keycloak管理控制檯的一組UI,以管理資源服務器,資源,範圍,權限和策略。部分內容也可以通過使用Protection API遠程完成。

  • 策略決策點(PDP)

    提供可分發的策略決策點,指向發送授權請求的位置,並根據請求的權限相應地評估策略。有關更多信息,請參閱獲取權限。

  • 策略執行點(PEP)

    提供不同環境的實現,以在資源服務器端實際執行授權決策。 Keycloak提供了一些內置的Policy Enforcer。

  • 策略信息點(PIP)

    基於Keycloak Authentication Server,可以從身份和運行時環境中獲取屬性。

核心概念:

users:用戶是一個可以登陸系統的實體,它可以擁有聯繫它們自身的屬性,例如郵箱、用戶名、地址、電話號碼或生日等,可以爲user分配組別或者角色。

authentication:相當於密碼,可以驗證和識別一個user。

authorization:給予用戶訪問的過程。

credentials:證書,可以供keycloak驗證用戶的東西,例如密碼、一次性密碼、證書、指紋等。

roles:相當於用戶的一個分類 ,一個組織可能有Admin\user\manager\emplee等角色,應用程序經常會分配權限給角色,而不是用戶,因爲用戶太難管理。

user role mapping:定義了一個用戶及角色的關係,一個用戶可以屬於零個或多個角色,用戶與角色的映射關係,這樣就可以決定用在各種資源訪問的權限管理。

composite roles:複合角色可以包含其他的角色,用戶擁有了複合角色就相當於擁有了它下面的所有子角色。

groups:組可以一組的用戶,也可以將角色映射到角色中,用戶可以成爲組員後繼承用組的角色

realms:領域,領域管理着一批,用戶、證書、角色、組等,一個用戶只能屬於且能登陸到一個域,域之間是互相獨立的,域只能管理在它下面的用戶。

clients:客戶端是一個實體,可以請求keycloak對用戶進行身份驗證,大部分情況下,客戶端是應用或服務希望使用keycloak來保護自己和提供一個單點登錄的解決方案。客戶端也可以是一個實體,請求身份信息或一個訪問信息,這樣就可以調用其他keycloak保護的應用或服務了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章