身份认证机制是应用程序最基本的功能,尤其对于企业级管理系统而言。它们通常需要实现身份管理、单点登录和安全策略设置等功能。Keycloak 是一个开源的身份和访问管理(IAM)解决方案,可以轻松部署在 Kubernetes 上,为应用程序提供集中认证等功能。
在最近结束的 KubeCon China 2024 上,我介绍了 DaoCloud 在身份认证机制上的一些探索和突破,主要是利用 Keycloak 强大而全面的功能来实现企业级身份和安全访问管理功能。在这个过程中,我们还创建了一些 Keycloak 插件来扩展其身份提供者(IDP)和事件功能,当需要进行定制化时,这些插件是很好的学习例子。接下来,我会带大家再仔细了解一下这部分内容。
什么是 Keycloak
什么是 Keycloak?
可以总结成两个方面:身份和访问管理系统(IAM)和单点登录(SSO)方案。
下图是 Keycloak 的管理界面,可以大致体现出它的功能所在,单点登录(SSO)涉及到 Clients、IdentityProviders 等菜单,用户管理涉及到 Users、Groups、Sessions 等菜单,Realm Roles 菜单用来实现访问控制/角色权限功能,还有 Password Policy 也是比较常用的功能。
02
DaoCloud 为什么
要集成 Keycloak
以云原生平台为例,它需要实现一个认证系统模块,这样其他模块就可以同它对接来进行单点登录。
Keycloak 功能全面,认证安全相关的功能基本都有;
Keycloak 是基于行业标准协议,如 OIDC、LDAP 等开发的,比较符合我们对企业级平台安全性、通用性的需求;
Keycloak 开箱即用,可以方便地被部署在 Kubernetes 上,符合云原生需求;
Keycloak 去年成为 CNCF 孵化项目,还是相对成熟和稳定的。
03
DaoCloud 使用
Keycloak 的实践
DaoCloud 的用户管理和认证管理系统(Identity Management and Authentication System) 集成 Keycloak 的大致架构如下图所示:
该系统后端 Server 采用 Keycloak 超管身份来调用它的 Admin Rest API,除了 Keycloak 的“角色权限”功能,其它功能基本都用上了。
在其他应用程序模块中,一旦在认证系统中创建了客户端(Client),它们便可以通过 OIDC 协议与 Keycloak 进行对接。用户在登录时将使用 Keycloak 的登录界面,它会直接向 Keycloak 发送用户名和密码以完成单点登录(SSO)过程。此外,IdentityProviders 模块支持通过 OIDC 等协议与外部身份提供商(如 Open LDAP、Active Directory 或其他社交平台等)进行集成,从而扩展用户源。这构成了一套级联的单点登录解决方案,完全利用了Keycloak 的原生功能来实现。
04
定制 Keycloak
我们在使用 Keycloak 的过程中,发现它的默认功能有时并不能完全满足需求,比如非标准协议的身份提供商之间并不互通,比如登录界面需要定制,再比如当某个动作发生需要通知 webhook,我们要考虑去定制或者扩展 Keycloak 的功能。
定制 Identity Provider
Keycloak 是用 JAVA 开发的,以定制一个 Identity Provider 为例,如下图所示,这个过程相当于将一个 JAVA 插件插到该功能模块上,之后 Keycloak 就能和非标 OAuth2 的外部身份提供商成功对接。
基于 JAVA 插件框架,Keycloak 提供了 Service Provider Interface 用于更方便地开发插件(具体可参考官网示例: https://www.keycloak.org/docs/25.0.2/server_development/#_providers ),这里需要执行以下两个步骤:
首先,实现 IdentityProviderFactory/IdentityProvider 等 JAVA 接口和一些配置文件,示例见下图:
其次,注册插件,需要将上述文件打成 jar 包并复制到 provider 目录下,运行 kc.[sh|bat] 脚本来编译,之后在Keycloak 界面上,插件就会出现在 Identity providers 菜单下,如下图所示:
定制登录页
一般情况下,登录页 theme 都是按实际需求进行定制的,比如,DaoCloud 对登录页的风格要求如下图所示:
https://www.keycloak.org/docs/25.0.2/server_development/#_themes
05
总结
参考链接
Keycloak 代码仓库:
https://github.com/keycloak/keycloak
Keycloak 官网:
https://www.keycloak.org/
Keycloak 官网文档:
https://www.keycloak.org/documentation.html
本文作者
蒋伊婷
架构师/全局管理团队 Leader
热门推荐
访问以下网址,或点击文末【阅读原文】立即体验
DaoCloud 公司简介
网址:www.daocloud.io
邮件:info@daocloud.io
电话:400 002 6898