使用 Keycloak 为云原生应用构建身份认证系统

科技   2024-09-13 17:01   上海  

身份认证机制是应用程序最基本的功能,尤其对于企业级管理系统而言。它们通常需要实现身份管理、单点登录和安全策略设置等功能。Keycloak 是一个开源的身份和访问管理(IAM)解决方案,可以轻松部署在 Kubernetes 上,为应用程序提供集中认证等功能。

在最近结束的 KubeCon China 2024 上,我介绍了 DaoCloud 在身份认证机制上的一些探索和突破,主要是利用 Keycloak 强大而全面的功能来实现企业级身份和安全访问管理功能。在这个过程中,我们还创建了一些 Keycloak 插件来扩展其身份提供者(IDP)和事件功能,当需要进行定制化时,这些插件是很好的学习例子。接下来,我会带大家再仔细了解一下这部分内容。

01

什么是 Keycloak

什么是 Keycloak?

可以总结成两个方面:身份和访问管理系统(IAM)和单点登录(SSO)方案

下图是 Keycloak 的管理界面,可以大致体现出它的功能所在,单点登录(SSO)涉及到 Clients、IdentityProviders 等菜单,用户管理涉及到 Users、Groups、Sessions 等菜单,Realm Roles 菜单用来实现访问控制/角色权限功能,还有 Password Policy 也是比较常用的功能。

02

DaoCloud 为什么
要集成 Keycloak

以云原生平台为例,它需要实现一个认证系统模块,这样其他模块就可以同它对接来进行单点登录。

在这里,我们没有从零开始开发,而是采用集成 Keycloak 的方式来实现的,主要原因有如下几点:
  1. Keycloak 功能全面,认证安全相关的功能基本都有;

  2. Keycloak 是基于行业标准协议,如 OIDC、LDAP 等开发的,比较符合我们对企业级平台安全性、通用性的需求;

  3. Keycloak 开箱即用,可以方便地被部署在 Kubernetes 上,符合云原生需求;

  4. 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 对登录页的风格要求如下图所示:

这时,可定制登录页 theme,具体可参考官网步骤:
https://www.keycloak.org/docs/25.0.2/server_development/#_themes

05

总结

Keycloak 去年已加入 CNCF 孵化项目,它在身份管理领域非常专业,功能也比较全面,深受使用者的好评。希望我的讲述,能够为大家提供一些使用 Keycloak 的经验,方便利用它快速实现用户认证、单点登录等功能,并且更专注于应用的业务逻辑开发。另一方面,如果大家在相关功能上有一些定制化的需求,也可以充分利用 Keycloak 的插件和 theme 机制来实现一些扩展功能。

参考链接

Keycloak 代码仓库:
https://github.com/keycloak/keycloak

Keycloak 官网:
https://www.keycloak.org/

Keycloak 官网文档:
https://www.keycloak.org/documentation.html




 本文作者 



蒋伊婷

架构师/全局管理团队 Leader




热门推荐

            

访问以下网址,或点击文末【阅读原文】立即体验

d.run,让算力更自由
https://d.run/




DaoCloud 公司简介

「DaoCloud 道客」,云原生领域的创新领导者,成立于 2014 年底,凭借其自主知识产权的核心技术,成功打造了新一代云原生操作系统 DaoCloud Enterprise 5.0,致力于推动企业数字化、智能化转型。依托在云原生领域的技术积淀与持续创新,「DaoCloud 道客」推出 d.run 算力一体化解决方案,作为专业的技术提供商参与并推动多个区域算力枢纽中心的建设,为各行各业提供稳定、高效的算力支持。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、格力集团、京东方、屈臣氏集团等。公司总部位于上海,并在新加坡、北京、深圳、成都、南京、武汉等地设立多家分公司及合资公司,总员工人数超过 300 人,是国家级“专精特新”小巨人企业、上海市高新技术企业,并入选了科创板培育企业名单。


网址:www.daocloud.io

邮件:info@daocloud.io

电话:400 002 6898



道客船长
分享云原生技术相关信息,助力开发者和企业云海扬帆!本公众号由 DaoCloud 负责运营
 最新文章