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