Keycloak是一個致力於解決應用和服務身份驗證與訪問管理的開源工具。可以通過簡單的配置達到保護應用和服務的目的。
用戶管理
你的應用不需要開發登錄模塊,驗證用戶和保存用戶。Keycloak開發了用戶管理,登錄,注冊,密碼策略,安全問題,二步驗證,密碼重置等功能。登錄,注冊界面所需字段都是可配置,可自定義的。
用戶角色,權限管理功能,用戶組功能。用戶sessions管理。
單點登錄/登出(Single-Sign On/Out)
用戶通過Keycloak驗證身份而非應用本身。當用戶通過Keycloak的身份驗證后,訪問其他應用則不需要登錄。
登出同樣適用。Keycloak也提供單點登出。
Kerberos對接
如果用戶驗證是通過Kerberos(LDAP或Active Directory)的方式,在登錄工作站后,也能自動的通過Keycloak驗證,而不需要再次提供用戶名密碼。
身份代理和社交應用登錄(Identity Brokering and Social Login)
在后台管理配置社交應用可以實現第三方應用授權。
Keycloak也能通過現成的OpenID Connect或SAML2.0 Identity Providers驗證用戶。只需要在后台配置即可。
用戶聯盟(User Federation)
Keycloak有內置的連接LDAP或AD的功能。你也可以實現自己的IdP,比如用戶存儲在關系型數據庫。
客戶端適配器(Client Adapters)
適配器讓保護應用和服務變得很簡單。已經有很多平台和編程語言的適配器。如果沒有與你的平台相適應的適配器,別擔心,Keycloak是建立在標准的協議之上,你可以使用任何OpenID Connect Resource Library或SAML 2.0 Service Provider library來實現。
你可以使用代理服務器來保護你的應用,那就根本不需要修改應用了。
后台管理(Admin Console)
通過后台管理,管理員可以管理Keycloak所有方面的配置。可以開啟關閉多種功能,配置身份代理和用戶聯盟。可以定義應用和服務,定義細粒的授權策略。管理用戶,包括角色,權限,sessions等。
賬戶管理界面(Account Management Console)
用戶可以通過賬戶管理界面管理自己的信息,更新,設定二次驗證。用戶也可以管理自己的sessions。
標准協議(Standard Protocols)
Keycloak是基於標准協議開發的,支持OpenID Connect, OAuth 2.0和SAML。
授權服務(Authorization Services)
如果基於role的授權無法滿足需求,Keycloak提供細粒的授權服務。允許你通過后台管理所有的服務,可以定義滿足你的需求的策略。
Admin REST API
Keycloak提供REST API用於后台管理,包括對Clients,Groups, Users, Roles等一系列資源的管理。這就為應用與Keycloak交互提供可能,應用可以在業務中實現對用戶角色權限的增減。
自定義主題
Keycloak為web頁面和email信息提供主題支持,更換符合公司產品風格的樣式,可以自定義內容包括:
- 賬戶管理界面
- 后台管理界面
- 郵件
- 登錄界面
- 歡迎界面
自定義用戶字段(Custom User Attributes)
我們可以在用戶屬性頁添加自定義屬性,並在注冊界面或用戶信息頁展示。
集群環境(Clustering)
Keycloak支持集群環境,保障Keycloak的穩定運行,減小服務器壓力。集群的搭建可以選擇standalone模式或domain模式。domain模式經官方提供的文檔使用軟件負載均衡已經搭建成功。
服務器緩存(Server Cache)
Keycloak有兩種緩存,一種緩存數據庫內容到內存,用以減少獲取數據的時間,包括realm, client, role和用戶元數據。這種緩存是本地緩存,本地緩存是不會在集群環境中復制的。如果數據被更新了,一個失效消息會發送給剩下所有的節點服務器,用於更新緩存。當然有的緩存可以支持集群,需要告訴集群服務器,將特定的條目從本地緩存中移除。
另一種緩存用於處理用戶sessions,離線tokens以及跟蹤登錄失敗次數,用於檢測網絡攻擊。這種緩存是臨時的,只在內存中保存,但是也可以復制到集群環境中。
HTTPS/SSL
Keycloak支持HTTPS協議傳輸,這也是官方推薦的方式。不過實際產品為了安全和負載均衡,可以考慮反響代理,對代理服務器做SSL,代理服務器與Keycloak交互仍使用HTTP協議。
服務提供者接口(Service Provider Interfaces)
Keycloak設計為包括大多數使用場景,但也支持定制化。Keycloak設計了SPI來允許開發者實現自己的服務提供者。Keycloak可用的SPI有Connections JPA,Email Sender,Email Listener,Login Protocol,Realm等。
擴展服務器(Extending Server)
Keycloak SPI框架提供實現或覆蓋已有的providers。Keycloak也提供擴展核心功能的方式,包括:
- 增加自定義REST服務
- 增加自定義SPI
- 增加自定義JPA實體到Keycloak數據模型中
驗證身份SPI(AUthentication SPI)
Keycloak自帶不同的驗證機制:kerberos, 密碼和一次性密碼。這些機制可能無法滿足你的需求,你可能會增加自己的驗證機制。Keycloak提供一個驗證身份SPI供創建新的插件時使用。