当前位置: 首页 > article >正文

SSO 单点登录详解

一、SSO 的概念

单点登录是指在多个应用系统中,用户只需要进行一次身份认证,就可以访问所有相互信任的应用系统。SSO 技术通过建立一个统一的身份认证中心,实现了用户身份的集中管理和认证,从而避免了用户在不同应用系统中重复登录的问题。

二、SSO 的工作原理

  1. 用户访问应用系统 A,应用系统 A 发现用户未登录,于是将用户重定向到身份认证中心。
  2. 用户在身份认证中心进行身份认证,输入用户名和密码等信息。
  3. 身份认证中心验证用户身份,如果认证成功,生成一个令牌(Token),并将用户重定向回应用系统 A,同时将令牌传递给应用系统 A。
  4. 应用系统 A 接收到令牌后,向身份认证中心验证令牌的有效性。如果令牌有效,应用系统 A 允许用户访问,并将用户的会话信息保存在本地。
  5. 用户访问应用系统 B,应用系统 B 发现用户未登录,于是将用户重定向到身份认证中心。
  6. 身份认证中心发现用户已经登录,直接将用户重定向回应用系统 B,同时将令牌传递给应用系统 B。
  7. 应用系统 B 接收到令牌后,向身份认证中心验证令牌的有效性。如果令牌有效,应用系统 B 允许用户访问,并将用户的会话信息保存在本地。

三、SSO 的实现方式

  1. 基于 Cookie 的 SSO

    • 这种方式是将令牌存储在用户浏览器的 Cookie 中。当用户访问不同的应用系统时,应用系统从用户的 Cookie 中读取令牌,并向身份认证中心验证令牌的有效性。
    • 优点是实现简单,不需要在服务器端保存用户的会话信息。缺点是 Cookie 存在安全风险,容易被窃取或篡改;而且 Cookie 只能在同一个域名下共享,如果应用系统不在同一个域名下,就无法使用这种方式。
  2. 基于 Token 的 SSO

    • 这种方式是将令牌作为参数传递给应用系统。当用户访问不同的应用系统时,应用系统从 URL 参数中获取令牌,并向身份认证中心验证令牌的有效性。
    • 优点是安全可靠,令牌不会被窃取或篡改;而且可以在不同的域名下共享,适用于分布式系统。缺点是实现相对复杂,需要在服务器端保存用户的会话信息。
  3. 基于 SAML 的 SSO

    • SAML(Security Assertion Markup Language)是一种基于 XML 的开放标准,用于在不同的安全域之间交换身份认证和授权信息。
    • 当用户访问应用系统时,应用系统将用户重定向到身份认证中心,身份认证中心生成一个 SAML 断言,并将用户重定向回应用系统,同时将 SAML 断言传递给应用系统。应用系统接收到 SAML 断言后,验证断言的有效性,并根据断言中的信息创建用户会话。
    • 优点是安全可靠,支持多种身份认证方式和授权机制;而且可以在不同的组织之间共享,适用于企业间的合作。缺点是实现复杂,需要对 SAML 标准有深入的了解。

四、SSO 的优点

  1. 提高用户体验:用户只需要进行一次身份认证,就可以访问所有相互信任的应用系统,无需重复输入用户名和密码,提高了工作效率。
  2. 提高安全性:SSO 技术可以集中管理用户身份认证,加强了安全控制。同时,SSO 可以采用多种身份认证方式,如密码、指纹、面部识别等,提高了身份认证的安全性。
  3. 简化管理:企业只需要维护一个身份认证中心,就可以管理所有用户的身份认证信息,简化了管理流程,降低了管理成本。

http://www.kler.cn/news/350685.html

相关文章:

  • npm、yarn、pnpm的workspaces使用
  • C++20中头文件syncstream的使用
  • 数学建模与优化算法:从基础理论到实际应用
  • 全面指南:在 Vue 中优雅封装 HTML <dialog> 组件
  • SIP 业务举例之 Call Forwarding - No Answer(无应答呼叫转移)
  • echarts散点图
  • 最短路问题之dijikstra算法
  • 【进阶OpenCV】 (16)-- 人脸识别 -- FisherFaces算法
  • Nordic-RT-Thread5.1.0移植笔记
  • 好玩的css按钮
  • 关于 GLFW、SDL2、Win32、GLUT 和 macOS(OSX)平台的介绍
  • UDP/TCP协议详解
  • Git 分支操作-开发规范
  • 条款2 理解auto类型的推导
  • 如何通过 Service Mesh 构建高效、安全的微服务系统
  • FFmpeg的简单使用【Windows】--- 视频倒叙播放
  • 一文详解线程池
  • R语言统计分析——折线图
  • 【uniapp】实现触底加载数据
  • Linux实验三
  • MySQL 数据库--查询
  • 《数据之海》
  • LeetCode 第419场周赛个人题解
  • Spring Boot在医疗病历B2B交互中的技术突破
  • 设计模式和软件框架的关系
  • 【优先算法】--双指针1