什么是Keycloak和它的具體用途
譯文【51CTO.com快譯】近年來,應用程序的安全性正在成為一個越來越重要的課題,在企業的日常運營過程中被頻繁提及。為了避免出現那些針對受保護數據被未經授權訪問到,進而招致數百萬美元的經濟處罰,企業往往希望自己手頭的幾乎每一種應用與服務,都能夠得到配套的用戶身份驗證與訪問管理(Identity and Access Management)。
目前,為了實現上述管控目的,市場上有著許多種或為免費、或是付費的安全解決方案。本文將向您介紹其中的一種新型實用工具--Keycloak。
Keycloak是什么?
Keycloak早在2014年9月就發布了其最初版本。目前,它的最新版本為13.0.1 (于2021年06月01日發布) 。由GitHub的項目描述頁面可知,Keycloak是一個“身份和訪問管理”的工具。它是由Red Hat的人員提供開發與維護。作為一個開源工具,Keycloak目前已獲得了Apache 2.0的許可證,因此任何感興趣開發者都可以對其作出貢獻。同時,由于它是Red Hat SSO的上游項目,因此可以被用戶運用到以企業為中心(enterprise-centered)的項目中。目前,Keycloak支持三個不同類型的協議,您可以在文末的實用鏈接中查看到。
Keycloak的特性
有了前面的概念,下面讓我們來具體看看Keycloak到底具有哪些功能特性。
-
多協議支持
前文提到了Keycloak可以支持三種不同的協議,他們分別是:OpenID連接、OAuth 2.0和SAML 2.0。
-
SSO
Keycloak能夠完全支持單點登錄(Single Sign-On)與單點登出(Single Sign-Out)。
-
管理控制臺
Keycloak提供了基于Web的GUI,您可以按需配置各種實例。
-
用戶身份和訪問
Keycloak可以作為一個獨立的用戶身份和訪問管理器,以便我們創建用戶數據庫,自定義角色和用戶組。據此,我們可以基于預定義的角色,在應用程序的內部進行相關安全設置,以實現對于用戶身份的驗證。
-
外部身份標識源的同步
如果您的用戶目前已經具有某種類型的用戶數據庫,那么Keycloak則能夠與此類數據庫進行同步。默認情況下,它支持LDAP和活動目錄(AD)。當然,您也可以使用Keycloak的用戶存儲API,為任何用戶創建自定義的可擴展數據庫。值得注意的是,在這種組合方案中,某些必要的數據可能無法獲取到Keycloak的齊全功能,因此您最好在實施前進行全面調研。
-
身份代理
Keycloak可以作為用戶和一些外部身份提供者之間代理。我們可以通過Keycloak的管理面板,來編輯兩側對應關系的列表。
-
社交身份提供者
Keycloak內置并支持Google、Twitter、Facebook、以及Stack Overflow等社交身份提供者。當然,這需要您在管理面板中進行手動配置。我們可以在Keycloak的相關文檔中,查詢到其支持的、社交身份提供者的全量列表,以及分別對應的配置手冊。
-
頁面定制
Keycloak允許您定制所有需要顯示給用戶看的頁面。由于這些頁面是.ftl格式的,因此您可以使用經典的HTML標記和CSS風格,來統一展示應用程序和公司品牌的風格。您甚至可以通過定制JS腳本,來個性化各種原本受限的頁面。
Keycloak的發行版
目前,Keycloak有三種主要的發行版:
-
服務器版
您可以從Keycloak的下載頁面處,獲取帶有獨立應用的tar或zip包。里面已經打包好了所有的腳本、文檔、以及能讓其正常運行的基本組件。目前,此類發行版中包含有兩個分支:一種可由WildFly服務器支持,而另一個是由Quarkus支持。由于它們目前尚處于預覽版階段,因此您在使用過程中可能會碰到一些意想不到的錯誤。
-
Docker鏡像版
它們是適合于Docker、Podman、Kubernetes、以及OpenShift的發行版。目前,有兩個針對Keycloak的官方Docker鏡像:一個是由Quay Container Registry持有的quay.io/keycloak/keycloak,另一個是Docker Hub持有的jboss/keycloak。您可以通過簡單的docker pull命令,來分別進行下載。
-
操作者(Operator)版
這是基于Operator SDK,且針對Kubernetes和OpenShift的發行版。
可見,不同的發行版適用于不同的業務需求。如果您正在使用Docker或Kubernetes的話,請選用Keycloak的鏡像與操作者版。其中,Keycloak的Docker鏡像版對于開發和測試是非常實用的。
作為聯動,您可以先搭建Keycloak服務器版,對其進行測試與變更。在完成測試后,您再重啟Docker鏡像,恢復您對Keycloak的所有更改,從而得到一個“純凈”的環境,以便進行下一步測試。
Keycloak的集成
在理解了Keycloak的基本概念與功能特性之后,我們下面來討論一下如何將它集成到自己的應用程序中。
在此,我將主要從Java生態系統的角度展開討論,當然也會涉及到一些其他語言和框架。目前,在Java領域中,時下流行的Spring Boot、Quarkus和Micronaut之類的框架,都帶有方便與Keycloak集成的各種適配器。例如:Spring Boot就有spring-boot-keycloak-starter,而Quarkus則有quarks-keycloak-authorization。此外,Python包:python-keycloak、基于Scala的應用庫:keycloak4s、以及基于C# 應用的Keycloak.Net,也都是非常實用的。所有這些庫不但都是開源的,并且由對應的社區也在圍繞著Keycloak進行開發和維護。您可以在文末找到相關鏈接。
其中,Spring Boot和Quarkus框架提供了已有的抽象,因此整個集成只需數行代碼、以及個別配置屬性的填寫,即可實現。而其他庫則只為客戶提供了Keycloak API,因此集成起來略顯復雜。
Keycloak的優勢
- Keycloak是免費的。而諸如AuthO或Okta之類的工具則需要付費。
- 由于它支持三種不同的身份驗證協議,因此您可以只使用一種工具,來協同多種應用程序,滿足不同的安全需求。
- 您可以根據實際需求,或自己的應用偏好,在不受限制的情況下,選用某種認證協議與工具。正如前文所述,Keycloak是Red Hat SSO的上游項目,因此它在產品質量和系統設計上都有保證。
- Keycloak的強大社區支持,既體現在大量的使用案例上,又形成了良好的問題互助與解答氛圍。例如,由于Keycloak有一個內置的身份提供者同步機制,因此它對于那些已將用戶存放到LDAP或AD之類用戶數據庫環境的場景,特別實用。
- 它支持諸如Google和Facebook之類社交身份提供者,您和您的團隊能夠直接以開箱即用(out of the box)的方式,使用社交賬號進行登錄。
- Keycloak提供了基于Web的GUI,用戶可以對配置進行輕松地修改。
- Keycloak SSO可以支持用戶同時訪問多項服務。
Keycloak的不足之處
Keycloak雖然有著上述顯著的優點,但是它也有著自身的不足之處。
- 如果某個應用程序只有單個客戶用到了Keycloak,那么他將無法獲益SSO的整體規模性優勢。
- 雖然Keycloak在原則上可以被配置成一個純用戶數據庫,但是它會附帶有各種特殊用途的表,因此您還不如直接使用專有的用戶關系型數據庫。
- 由于Keycloak屬于一個免費的開源項目,因此在其社區中,并無固定的開發者、及其發展路線路圖。而且,它無法像Stack Overflow那樣,為用戶提供具有質量保證的企業級服務支持和響應水平。
小結
綜上所述,我們討論了有關Keycloak的基本概念,不同發行版本,功能性特征,以及各種優缺點。作為一種新的身份和訪問管理工具,它值得我們在適當的管控應用場景中進行試用。當然,如果您在使用過程中有什么心得,也可以通過其社區,給予及時的反饋,以促進其不斷迭代與改進。
實用鏈接
- 主頁 - https://www.keycloak.org/
- Keycloak文檔 - https://www.keycloak.org/docs/latest/getting_started/index.html
- Keycloak下載鏈接 - https://www.keycloak.org/downloads
- Keycloak4s - https://github.com/fullfacing/keycloak4s
- Keycloak.Net - https://github.com/lvermeulen/Keycloak.Net
- Python Keycloak - https://github.com/marcospereirampj/python-keycloak
原文標題:What Keycloak Is and What It Does?,作者:Bartłomiej Żyliński
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】