【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】