Keycloak 是一个针对现代应用程序和服务的开源身份和访问管理解决方案。Keycloak 支持单点登录,因此服务可以通过 OpenID Connect、OAuth 2.0 等协议对接 Keycloak。
Keycloak 是一个针对现代应用程序和服务的开源身份和访问管理解决方案。Keycloak 支持单点登录(Single-Sign On),因此服务可以通过 OpenID Connect、OAuth 2.0 等协议对接 Keycloak。同时 Keycloak 也支持集成不同的身份认证服务,例如 Github、Google 和 Facebook 等。
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 可以支持三种不同的协议,他们分别是: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 是免费的。而诸如 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 那样,为用户提供具有质量保证的企业级服务支持和响应水平。