什么是Keycloak和它的具体用途

译文
安全
本文讨论了一种新的身份和访问管理工具--Keycloak的基本概念,不同发行版本,功能性特征,以及各种优缺点。

[[406217]]

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

 

责任编辑:华轩 来源: 51CTO
相关推荐

2012-03-19 20:38:06

腾讯

2016-08-31 13:48:00

AndroidRetrofit源码解析

2023-09-19 16:37:47

网络

2022-03-24 23:06:25

大数据技术应用

2010-02-04 16:35:24

C++ delete

2009-12-02 19:56:33

PHP中try{}ca

2022-02-24 23:37:19

区块链钱包比特币

2010-06-22 12:58:57

Linux at命令

2009-12-01 13:20:23

PHP配置函数ini_

2010-03-11 17:16:48

Python平台

2023-02-28 07:22:14

数据血缘能DataLeap

2010-09-03 13:35:22

什么是DHCP协议

2010-09-07 08:55:21

字符串

2023-12-12 13:49:00

差量算法Myers

2010-01-25 10:05:29

Mozilla FirFirefox浏览器

2022-11-16 08:43:56

Linux/etc/hosts文件

2009-09-08 18:02:20

CCNA用途

2011-03-02 18:15:09

Proftpd设定

2011-12-05 23:29:09

应用

2023-11-15 13:15:52

C语言结构体
点赞
收藏

51CTO技术栈公众号