- 文档首页
缓存数据库 Redis 版
最佳实践
基于 Redis 实现集中式 session 单点登录(SSO)
最佳实践
基于 Redis 实现集中式 session 单点登录(SSO)
基于 Redis 实现集中式 session 单点登录(SSO)
本文介绍基于缓存数据库 Redis 版实现集中式 session 单点登录的解决方案。
随着企业信息系统的规模持续扩大,架构也日益复杂,用户常常需要在不同业务平台之间频繁切换。传统的多系统独立登录模式不仅导致操作繁琐、体验割裂,还可能因账号信息的重复管理引入安全风险。为应对上述挑战,单点登录(Single Sign-On,简称 SSO)技术应运而生,并逐步成为实现统一身份认证与访问管理的常用解决方案。
本方案适用于企业内部多系统集成、微服务架构下的统一身份认证场景,旨在利用 Redis 集中式会话管理能力,来构建一套高效、稳定、易扩展的 SSO 系统。通过该系统,用户仅需在认证中心完成一次登录,即可无缝访问所有已授权的业务系统,而无需重复验证身份,提升用户操作便捷性的同时,也增强了企业系统的整体安全性。
本方案可实现如下目标:
- 实现多业务系统间的登录状态共享,确保用户一次登录即可无缝访问所有授权服务。
- 将 Redis 作为统一会话存储中心,保障分布式环境下 session 的一致性和高可用性。
- 设计简洁明了的登录与登出流程,确保身份认证过程的安全性和可靠性。
- 构建清晰易用的系统架构和代码实现,方便后续维护和功能扩展。
本 SSO 登录系统主要包含如下核心组件:
- 作为用户身份认证的统一入口,该组件负责接收用户登录请求并验证身份信息。认证成功后,系统将在 Redis 中生成唯一的 session ID,并将该 ID 通过 HTTP cookie 下发至客户端浏览器,建立登录状态。同时,认证中心还提供登出接口,用于清理 session 和 cookie,实现统一登出。
- Redis 作为高性能的内存数据库,承担所有登录 session 的集中存储任务。所有业务系统通过访问 Redis 来共享同一份 session 数据,实现登录状态的跨系统共享,保证分布式环境下的状态一致性和高效访问。
- 各业务系统(例如 Service A,Service B)通过读取客户端 cookie 中的 session ID,向 Redis 查询对应的用户信息,判断用户是否已登录。若登录有效,业务系统将允许用户访问相应资源;若未登录,则重定向至认证中心的登录页面,实现统一认证流程。
基于缓存数据库 Redis 版实现集中式 session 单点登录的系统架构设计如下图所示。
本方案架构具备如下优势:
- 基于 Redis 实现会话信息的统一存储管理,解决了传统单机 session 在分布式环境下的状态同步问题,确保所有业务系统能够实时获取最新的用户登录状态。
- 用户在认证中心登录后,系统将 session ID 写入 HTTP cookie,并由浏览器自动携带该 cookie 访问业务系统,实现无感的登录状态传递。
- 用户仅需在认证中心登录一次,系统即可在所有业务中共享登录状态。登出时,认证中心负责清理 Redis 中的 session 及浏览器 cookie,确保所有业务的访问权限同步失效,保障安全。
- Session 集中存储在 Redis,新业务系统仅需接入 Redis 验证 session,无需额外复杂集成即可快速融入现有认证体系,降低系统维护的复杂度与成本。
您需要提前准备如下资源并为各资源设置相关配置。
- 登录已安装对应环境的 ECS 实例。ECS 实例登录方法,请参见登录实例。
- 在 ECS 的命令行窗口或命令终端工具中,执行如下命令克隆代码。
- 进入 SSO 登录系统项目的目录,找到 config.py 文件,并根据您 Redis 和 ECS 实例的实际情况修改对应配置。
说明
- 以下代码仅展示了 SSO 登录系统的项目中,涉及缓存数据库 Redis 版和 ECS 实例的配置部分。
- 您可以在 Redis 控制台上查看实例的连接地址域名和端口号。具体操作步骤,请参见查看连接地址。
- 若您忘记 Redis 实例 default 账号的密码,您也可以在控制台上重置密码。具体操作步骤,请参见重置密码。
- 在 SSO 登录系统项目的根目录下,执行如下命令启动服务。
- 打开浏览器,在 URL 地址中输入 http://<ECS 的公网 IP>:5000/login 打开 SSO 登录系统的访问认证中心界面。
说明
执行如下操作前,已在 SSO 登录系统项目的 auth_server.py 文件中,通过硬编码的方式在 login 函数中录入了 user1: password1 和 user2: password2 两个用户的登录信息。
- 在 SSO 登录系统的访问认证中心界面,输入用户名(例如 user1)和密码(例如 password1)后,单击登录进行身份验证。
- 登录成功后会自动跳转至服务选择界面,您可以自行选择进入服务 A 或者服务 B。
- 本文示例中选择进入服务 A,选择后无需再次输入密码即可跳转至对应服务的网页完成登录,因为在用户访问前,系统已向 Redis 请求该用户的 session,浏览器会通过 cookie 自动携带该 session。
- 用户登出或 session 到期后,系统会清除 Redis 中的 session,用户再次访问时需要重新进行身份验证完成登录。
最近更新时间:2026.10.22 14:41:13