546 words
2 minutes
单点登录(SSO)学习笔记
单点登录(SSO)学习笔记
1. 概念
SSO(Single Sign-On,单点登录) 是一种认证机制,用户只需登录一次,就可以访问多个相互信任的系统,无需再次输入用户名和密码。
优点
- 用户体验好:一次登录即可访问多个系统。
- 降低密码管理成本,提高安全性。
- 集中式管理:统一管理认证和权限。
缺点
- 单点故障风险:SSO 服务宕机可能导致所有应用无法访问。
- 实现复杂:涉及跨域、协议、安全等问题。
- 安全风险集中:SSO 安全漏洞会影响所有相关系统。
2. 核心原理
SSO 的核心是 认证和信任传递:
用户 -> 系统A -> SSO登录 -> Token/Cookie -> 系统A验证 -> 访问成功用户 -> 系统B -> 验证SSO Token -> 访问成功3. 常见 SSO 流程
3.1 Cookie + 重定向方式(示例)
1. 用户访问系统 A,检测未登录 -> 重定向到 SSO 登录中心2. 用户输入用户名密码 -> SSO 验证通过3. SSO 设置认证 Cookie4. 重定向回系统 A -> 系统 A 读取 Cookie -> 登录成功5. 用户访问系统 B -> 带 Cookie -> 验证通过 -> 登录成功3.2 Token(JWT)方式(示例)
// 前端请求系统AGET /systemA/resource
// 系统A重定向到SSOGET /sso/login?redirectUrl=/systemA
// 用户登录SSOPOST /sso/authenticate {username,password}
// SSO 返回JWT TokenHTTP 302 Redirect to /systemA?token=eyJhbGciOiJIUzI1NiIsInR...
// 系统A验证TokenClaims claims = Jwts.parser() .setSigningKey(secretKey) .parseClaimsJws(token) .getBody();System.out.println("User: " + claims.getSubject());4. 常见协议
| 协议 | 说明 |
|---|---|
| CAS (Central Authentication Service) | 经典 SSO 协议,支持 Ticket 验证 |
| OAuth2 | 授权框架,主要用于第三方应用授权登录 |
| OpenID Connect (OIDC) | 基于 OAuth2 的身份认证协议 |
| SAML | 基于 XML 的企业级单点登录协议 |
5. 示例实现
5.1 Spring Security + OAuth2
@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/login","/sso/**").permitAll() .anyRequest().authenticated() .and() .oauth2Login() .loginPage("/login") .defaultSuccessUrl("/home", true); }}5.2 CAS 客户端 Java 示例
@Configurationpublic class CasSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .logout().logoutSuccessUrl("/sso/logout") .and() .cas() .loginUrl("https://sso.example.com/login") .serviceProperties(serviceProperties()); }
@Bean public ServiceProperties serviceProperties() { ServiceProperties sp = new ServiceProperties(); sp.setService("https://app.example.com/login/cas"); sp.setSendRenew(false); return sp; }}6. 注意事项
- 跨域问题:不同域下 Cookie 无法共享,需要使用 Token 或配置 CORS。
- 安全性:Token/Cookie 必须加密和签名。
- 注销机制:设计全局退出,确保用户在所有系统登出。
- 过期与刷新:Token/Cookie 需要设置有效期,并支持刷新。
7. 实战建议
- 小型系统:Cookie + Session 足够。
- 多域/跨平台:JWT + OAuth2 或 OIDC。
- 企业级系统:SAML 或 Keycloak。
8. 流程图示例
+-------+ +------------+ +---------+| User | -----> | System A | ----> | SSO |+-------+ +------------+ +---------+ | | | | | <--- Redirect ---| | | | | <--- Token ---- | | | | | | | ------> verify ->| | | | | <---- success --| |9. 学习总结
- SSO 本质是“一次登录,多系统共享认证”。
- 常用实现方式:Cookie/Session、JWT、OAuth2/OIDC、CAS、SAML。
- 核心难点:跨域、全局登出、安全性、协议选择。
- 推荐实践:
- 小系统用 Cookie + Session
- 跨域系统用 OAuth2/JWT
- 企业应用用 Keycloak / SAML
Share
If this article helped you, please share it with others!
单点登录(SSO)学习笔记
https://mizuki.mysqil.com/posts/sso-learning/ Some information may be outdated
Related Posts Smart
1
ComfyUI 新手入门:从节点工作流到生成第一张 AI 图片
AI编程 面向零基础读者理解 ComfyUI 的工作流原理,完成安装、模型放置和文生图,并认识 Checkpoint、CLIP、VAE、Sampler、LoRA 等核心概念。
2
商城 Agent 实战(七):用日志、评测、监控与人工接管完成上线闭环
AI编程 为 LangChain4j 商城 Agent 增加全链路日志、Micrometer 指标、自动化评测、Prometheus 告警和可持久化的人工客服工单,让它从功能演示走向可运营系统。
3
Midscene.js 新手入门:用自然语言完成网页自动化与 UI 测试
AI编程 从零认识 Midscene.js,完成模型配置、Playwright 接入、自然语言操作、数据提取、页面断言与测试报告,并理解它适合解决什么问题。
4
商城 Agent 实战(六):让 Agent 安全执行退货申请工作流
AI编程 在 Spring Boot 商城中,用 LangChain4j Tool、Redis 状态机、跨轮确认、幂等和服务端鉴权实现可控的退货申请工作流。
5
商城 Agent 实战(五):用 Redis 为 LangChain4j Agent 实现持久化多轮记忆
AI编程 在 AgentShop 中使用 LangChain4j ChatMemory 和 Redis 保存多轮对话,并实现用户隔离、会话管理、消息脱敏、窗口裁剪和并发控制。






