架构面试-场景题-单点登录(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)机制来验证用户和服务,用户登录后会收到一系列票证,这些票证可以用于访问网络中的其他服务而无需再次输入密码。

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

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

相关推荐
GSDjisidi9 小时前
东京IT软件会社-(株)GSD|多种技术栈募集,高度人才+20分
开发语言·面试·职场和发展
xhxxx11 小时前
不用 Set,只用两个布尔值:如何用标志位将矩阵置零的空间复杂度压到 O(1)
javascript·算法·面试
有意义11 小时前
斐波那契数列:从递归到优化的完整指南
javascript·算法·面试
用户479492835691512 小时前
面试官最爱挖的坑:用户 Token 到底该存哪?
前端·javascript·面试
Heo12 小时前
Vue3.4中diff算法核心梳理
前端·javascript·面试
齐生112 小时前
iOS 知识点 - ARC / 引用计数 / SideTable / weak 表
笔记·面试
用户479492835691512 小时前
XSS、CSRF、CSP、HttpOnly 全扫盲:前端安全不只是后端的事
前端·后端·面试
镜花水月linyi13 小时前
Java 线程创建的完整链路:从 Java 层 → JVM 层 → 操作系统层
java·后端·面试
CC码码15 小时前
前端字符串排序搜索可以更加细化了
前端·javascript·面试
Crystal32815 小时前
冒泡排序 bubble sort
前端·javascript·面试