架构面试-场景题-单点登录(SSO)怎么实现的

文章目录

概述

单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在多个应用程序和网站上使用一个凭据进行登录, 就是说 允许用户在多个应用或服务中只需进行一次身份验证即可访问所有授权的服务

基于Cookie

利用父域的Cookie机制,在主域名下设置一个共享的Cookie,子域名可以读取这个Cookie来确认用户的身份。

这种方法适用于同主域名下的多个子域名之间的SSO,但如果不同主域名则不适用。

优点: 实现简单,适用于同主域名下的多个子域名之间。

缺点: 不适用于跨主域名的情况,安全性较低,容易受到中间人攻击和跨站脚本(XSS)攻击。

基于Token(OAuth, JWT)

用户在身份提供者处验证后,获得一个Token(例如OAuth中的Access Token或JWT)。

Token被存储在客户端(如Cookie、LocalStorage)或服务器端(如Session),当用户访问其他应用时,应用通过Token验证用户身份。

这种方式支持跨域,且更安全,因为Token可以加密。

优点: 支持跨域,Token可加密传输,提高安全性;Token可以离线存储,减轻服务器负担。

缺点: 需要妥善管理Token的有效期和安全性,防止Token泄露;JWT如果过长可能影响性能。

集中式认证服务 (CAS, SAML)

中心化认证服务作为单一入口,所有应用都依赖它进行身份验证。

用户在CAS/SAML服务器上登录后,CAS/SAML服务器会生成一个Ticket或Assertion传递给应用,应用再使用这个Ticket或Assertion与CAS/SAML服务器通信,确认用户身份。

CAS和SAML是两种广泛使用的集中式认证协议。

优点: 提供标准化的SSO解决方案,易于集成;能够支持多种不同的应用和服务。

缺点: 中心化服务可能成为单点故障;配置和维护较为复杂。

分布式Session:

使用共享的Session存储(如Redis、Memcached),所有应用都可以访问同一个Session存储。

用户在任一应用登录后,Session信息被写入共享存储,其他应用可以通过读取这个共享Session来确定用户状态。

优点: 提高了应用的扩展性和可用性,Session数据可以在集群中共享。

缺点: 增加了对共享存储系统的依赖,存储系统故障会影响整个SSO流程。

轻型目录访问协议(LDAP)

LDAP用于存储和检索网络上的用户和组信息,支持SSO。

应用通过查询LDAP服务器验证用户身份,避免了每个应用单独维护用户信息。

优点: 便于管理和查询用户信息,适用于大型企业环境。

缺点: 配置和维护相对复杂,不适合小型或临时项目。

OAuth 2.0/OIDC

OAuth 2.0是一个授权框架,OpenID Connect(OIDC)建立在OAuth 2.0之上,提供了身份验证功能。

用户在一个授权服务器上登录后,授权服务器向客户端应用颁发令牌,应用使用这些令牌来访问资源服务器或确认用户身份。

优点: 标准化接口,易于第三方应用集成;支持多种授权模式。

缺点: 实现细节较多,需要仔细设计安全措施;可能存在权限过宽的问题。

Kerberos

Kerberos是一种网络认证协议,特别适合企业内部网络环境,支持SSO。

Kerberos使用票证(Ticket)机制来验证用户和服务,用户登录后会收到一系列票证,这些票证可以用于访问网络中的其他服务而无需再次输入密码。

优点: 安全性高,适用于大型企业内部网络;支持多种认证机制。

缺点: 配置复杂,维护成本高;仅限于内部网络,不适用于互联网环境。

相关推荐
磊 子1 天前
第五章:运输层
网络·计算机网络·面试·运输层
阿拉伯柠檬1 天前
传输层协议TCP(三)
linux·网络·网络协议·tcp/ip·面试
测试老哥1 天前
2026最新的软件测试面试八股文(答案+文档)
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
C雨后彩虹1 天前
简易内存池
java·数据结构·算法·华为·面试
是一个Bug1 天前
进程、线程、内存管理和I/O模型
java·开发语言·面试
四眼肥鱼1 天前
不是吧,不是吧,前端面试又出新玩法了?!
前端·面试
不想秃头的程序员1 天前
Vue3 defineModel 完全指南:从基础使用到进阶技巧
前端·vue.js·面试
不想秃头的程序员1 天前
🔥Vue3 动态组件‘component’全解析
前端·vue.js·面试
自燃人~1 天前
10 亿条数据排序:外部排序与 10 路归并完整说明
java·面试
努力学算法的蒟蒻1 天前
day54(1.5)——leetcode面试经典150
算法·leetcode·面试