单点登录(Single Sign-On, SSO)介绍

单点登录(SSO) 是一种身份验证机制,允许用户在一个系统中登录后,能够访问多个相互独立的系统或应用,而无需在每个系统中都进行单独的身份验证。用户只需要在第一个系统(或应用)中登录一次,之后访问其他受信任的系统时,系统会自动识别并授权,从而避免频繁登录的麻烦。

SSO 的工作原理

SSO 的核心思想是通过一个统一的身份认证服务来验证用户的身份,从而实现对多个应用或系统的授权访问。下面是 SSO 的基本工作流程:

  1. 用户访问目标应用:用户尝试访问某个应用(通常是 Web 应用)时,应用会检查用户是否已经登录。
  2. 重定向到身份提供者(Identity Provider, IdP):如果用户尚未登录,应用将用户重定向到 SSO 的身份提供者(IdP)。IdP 是负责用户身份验证的系统,通常是一个集中的认证服务器。
  3. 用户身份验证:用户在 IdP 上进行身份验证,通常通过输入用户名和密码,或者通过多因素身份验证(如短信验证码、指纹识别等)。
  4. 生成认证令牌(Token):身份验证成功后,IdP 生成一个认证令牌(通常是一个 JWT 或 SAML 令牌),并将其返回给用户的浏览器。
  5. 用户访问目标应用:用户的浏览器将认证令牌传递给目标应用。目标应用验证令牌的有效性,若验证成功,则允许用户访问应用。
  6. 访问其他应用:对于用户要访问的其他应用,系统将检查用户是否已经登录,如果是,直接允许访问;如果不是,再次重定向到 IdP 进行身份验证。用户不需要重新输入用户名和密码,IdP 会自动识别用户身份,并返回相应的认证令牌。

SSO 的技术实现方式

常见的 SSO 实现方式有多种,其中最流行的两种方式是 基于 SAML基于 OAuth2/OpenID Connect

1. 基于 SAML(Security Assertion Markup Language)

SAML 是一种 XML 标准,用于在身份提供者(IdP)和服务提供者(SP)之间交换认证和授权数据。SAML 通常用于企业级应用和单点登录系统。

  • SAML 流程:用户访问应用(SP)。SP 检查用户是否已认证,若未认证,重定向用户到 IdP。用户在 IdP 上输入凭证(如用户名和密码)。IdP 生成一个 SAML 响应(包含用户身份信息和授权数据),并将其返回给 SP。SP 验证 SAML 响应,并授予用户访问权限。

2. 基于 OAuth2 和 OpenID Connect

OAuth2 是一个授权框架,允许第三方应用获取用户资源的访问权限,但不涉及身份验证。OpenID Connect 是基于 OAuth2 的身份验证协议,解决了 OAuth2 只处理授权、不涉及身份验证的问题。

  • OAuth2 和 OpenID Connect 流程:用户访问一个应用,应用检测到用户尚未登录。应用重定向用户到 OAuth2 或 OpenID Connect 提供者(身份提供者,IdP)。用户在 IdP 上输入凭证并完成认证。IdP 返回一个访问令牌(Access Token)和/或 ID 令牌(ID Token)给客户端。客户端使用令牌访问受保护的资源。在后续访问其他应用时,用户可以直接通过令牌验证身份,无需重新登录。

SSO 的优点

  1. 提升用户体验:用户只需登录一次,就能访问多个应用,减少了多次登录的麻烦,提高了用户体验。
  2. 减少密码疲劳:用户不需要记住每个应用的不同密码,避免了密码管理的复杂性,从而减少了密码疲劳。
  3. 简化管理:通过集中管理身份认证和授权,简化了企业应用的身份管理,管理员可以轻松管理用户的访问权限和身份信息。
  4. 提高安全性:SSO 可以减少密码泄露的风险,集中管理身份验证可以减少每个应用的漏洞。通过多因素认证(MFA)和其他安全措施,可以提升整体系统的安全性。
  5. 降低 IT 成本:集中认证和管理意味着 IT 部门不需要为每个应用分别维护独立的用户认证系统,从而降低了运维成本。

SSO 的缺点

  1. 单点故障:如果身份提供者(IdP)发生故障,所有依赖该 IdP 的应用将无法进行身份验证,导致整个系统不可用。
  2. 复杂性:实现和维护 SSO 需要较高的技术要求,尤其是当涉及多个不同平台或技术栈时,集成不同系统可能变得复杂。
  3. 安全风险:如果 SSO 的认证系统受到攻击,攻击者可能会获得对所有集成应用的访问权限。因此,SSO 系统需要采取严格的安全措施,如加密、MFA(多因素认证)等。
  4. 权限控制:SSO 系统的权限控制需要仔细设计,确保用户只拥有适当的访问权限。如果权限管理不当,可能会导致不必要的权限泄漏。

SSO 与传统认证的对比

登录次数

登录一次,可以访问多个应用

每个应用都需要单独登录

用户体验

更加便捷,用户体验好

用户需要多次输入用户名和密码

安全性

集中管理,提高了整体安全性(可以加入 MFA 等)

安全性较低,每个系统的安全性独立,可能存在漏洞

管理复杂度

集中管理,简化了管理

每个系统独立管理,管理工作繁重

依赖性

依赖单一身份提供者(IdP),可能成为单点故障

各系统独立,互相不影响

常见的 SSO 解决方案

1.企业级 SSO 解决方案:

  • Active Directory(AD) + ADFS:微软的 Active Directory 可以配合 ADFS(Active Directory Federation Services)实现企业内部的单点登录,常用于 Windows 环境中的 SSO。
  • LDAP(Lightweight Directory Access Protocol):LDAP 是一个用于访问目录服务的协议,常用于实现企业内部的身份管理和 SSO。

2.第三方 SSO 服务:

  • Okta:一个企业级身份和访问管理平台,提供 SSO、身份验证、多因素认证等功能。
  • OneLogin:提供云端身份管理、SSO 和多因素认证等功能。
  • Auth0:一个流行的身份验证和授权平台,支持 SSO、OAuth、OpenID Connect 等协议。
  • Google Identity Platform:Google 提供的身份认证平台,支持基于 OAuth2 的 SSO。

3.开源 SSO 解决方案:

  • Keycloak:一个开源身份和访问管理解决方案,支持 SSO、身份验证、授权管理等。
  • CAS(Central Authentication Service):一个开源的 SSO 解决方案,常用于大学和教育机构的认证系统。

SSO 在企业中的应用场景

  • 企业内部应用:通过 SSO,企业可以简化员工对多个内部系统(如邮件系统、ERP 系统、HR 系统等)的访问管理。
  • 外部 SaaS 服务:企业可以使用 SSO 集成多个 SaaS 应用(如 Google Workspace、Salesforce、Slack 等),简化员工的登录过程。
  • 跨域认证:SSO 使得跨域(如多个子域名、多个应用系统等)之间的统一认证成为可能,用户只需登录一次即可访问所有受信任的资源。
全部评论

相关推荐

1、自我介绍2、Agent项目是实习项目还是个人项目?有没有上线?3、拷打实习(10min)4、大模型微调,你的训练数据集是如何构建的?数据量有多大?5、在构建数据集的过程中,遇到了哪些挑战?花了多长时间?6、你之前的实习经历偏后端工程,你未来的职业规划更倾向于纯后端开发,还是希望从事与AI/大模型结合的工作?7、详细讲一下Golang中Channel的概念和作用,它是否是并发安全的?8、Channel和传统的锁(Mutex)在实现并发控制时有什么区别?各自的适用场景是什么?9、讲一下GMP模型10、当P的本地队列为空或者不为空时,它会怎么去调度G(协程)?11、Redis支持哪些数据结构12、为什么Redis的速度这么快13、如何实现一个类似淘宝搜索框的实时商品名称模糊搜索功能?14、实时输入联想与输入完成后点击搜索在技术实现上有什么本质区别?15、实时搜索通常使用什么网络协议(如WebSocket)?你了解或有使用过吗?讲一下16、请详细说明微信扫码登录的完整流程和背后发生的原理17、在微服务架构中,服务发现和负载均衡是如何实现的?18、服务注册中心(如Nacos, Consul)是如何工作的?服务实例如何注册和保活(如通过心跳机制)?19、讲一下Agent中的“长短期记忆”20、什么样的信息应该放在长期记忆,什么样的信息放在短期记忆?21、当对话轮数很多,上下文窗口不足时,有哪些处理策略?(如截断、压缩)22、如果要进行记忆压缩,通常有哪些方法?23、了解过Agent的设计范式吗?有哪些?24、你设计的Agent是怎么实现ReAct模式的?详细讲讲25、手撕:实现一个并发任务处理器:给定一个包含100个任务ID的列表,要求控制最大并发数为3,模拟并发调用某个外部接口(如打印ID)26、反问
三本咋了:很好的面筋
查看24道真题和解析
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务