单点登录(SSO)

1 基础知识

单点登录机制(SSO)允许用户登录应用程序一次,并访问所有相关的系统,而不需要单独登录它们。

由于 SSO,用户只需登录一次即可使用服务,并自动登录到所有相关应用程序。SSO 消除了单独登录它们的需要。此外,用户不需要存储或记住多个凭据。

单点登录仅与身份验证过程相关。它的任务是验证用户的身份,并在相关应用程序之间共享该信息。

2 工作流程

让我们简单介绍一下SSO解决的问题。我们希望用户能够在 domain1 和 domain2 使用相同的登录名和密码登录。此外,如果用户已经在 domain1 登录,则应该在 domain2 自动登录,反之亦然。解决方案是在域之间共享会话数据。但是,由于同源策略,cookie不能在域之间共享。因此,SSO通过对用户进行身份验证并以各种方式共享他们的会话数据来解决问题。

通常,有一个中心域来标识用户并共享他们的会话数据,例如,以JWT的形式。让我们大致描述一下SSO过程。

  1. 用户进入 domain1
  2. domain1 检查没有会话 cookie,因此将用户重定向到 SSO 系统
  3. SSO 系统检查没有会话 cookie,因此提示登录页面
  4. SSO 系统对用户进行身份验证
  5. SSO 系统设置会话 cookie(如果身份验证成功)
  6. SSO 系统使用包含会话数据的参数(例如 JWT)重定向回 domain1
  7. domain1 使用传递的数据设置会话 cookie
  8. 用户进入 domain2
  9. domain2 检查没有会话 cookie,因此将用户重定向到 SSO 系统
  10. SSO 系统检查会话 cookie 是否存在
  11. SSO 系统使用包含会话数据的参数(例如 JWT)重定向回 domain2
  12. domain2 使用传递的数据设置会话 cookie

上面的方法是最普遍的一种。它可以根据实现的SSO配置和体系结构而有所不同。下面我们可以在图表中看到前面描述的过程:

单点登录(SSO)

3 实现方案

有多种架构可用于实现 SSO

最常用的一种是 WEB SSO 。 WEB SSO 仅适用于可以使用 Web 浏览器访问的服务。它允许用户通过一次登录访问一组 Web 服务器。实现 WEB SSO 主要有两种方法:

  • 使用基于 Web 的反向代理控制身份验证过程
  • 使用安装在每个特定服务器上的代理

这种架构通常使用 cookie 来跟踪用户的身份验证状态。前面介绍的 SSO 流程适用于 WEB SSO 架构。

另一种架构称为企业单点登录(E-SSO)。它与 WEB SSO 略有不同,并且更改对最终用户是透明的。用户拥有 E-SSO 客户端的单一凭据,并且仅登录一次。 E-SSO 处理登录到相关应用程序。不同之处在于服务可以具有单独的身份验证凭据。由 E-SSO 客户端维护。此外,应用程序不需要了解 E-SSO 客户端。当组织想要为已经存在和配置好的系统提供SSO时,这种架构通常尤其适用。

4 优点和缺点

让我们分析一下SSO解决方案的优缺点。

有点

  • 简化使用多种服务的最终用户的登录过程
  • 减少忘记凭证或凭证无效的情况。因此,它减少运维的成本和工作量
  • 简化凭证管理
  • 通过减少凭据暴露来提高安全性
  • 可以改善组织之间的整合与合作

缺点

  • 当提供SSO服务的程序关闭(宕机)时,所有应用程序都无法访问
  • 实现SSO可能耗时且代价高昂
  • 通过窃取SSO凭据,黑客可以访问所有相关的系统
  • 必须强制使用强而复杂的密码
  • 一些SSO提供者与第三方共享数据。需要对供应商的条款和政策进行深入研究。

5 有用的文档

Spring Security OAuth 2 Guides

Original: https://www.cnblogs.com/cjsblog/p/16092114.html
Author: 废物大师兄
Title: 单点登录(SSO)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612582/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mysql 的Innodb引擎和Myisam数据结构和区别

    先大体看一下MySQL的SQL layer层的一个架构流程: 简要介绍一些关键模块: [En] Give a brief description of some key modul…

    数据库 2023年5月24日
    090
  • Vim配置文件-详解(.vimrc)

    Vim配置文件的作用 Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim 所有系统用户在启动Vim时,都会加载这个配置文件。…

    数据库 2023年6月14日
    078
  • Queue

    队列( Queue)是一种经常使用的集合。 Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表 Queue接口常用的实现类是 Linke…

    数据库 2023年6月9日
    089
  • IPFS 集群部署

    IPFS 和 IPFS-Cluster 默认的端⼝:IPFS: 4001 – 与其他节点通信端⼝ 5001 – API server 8080 – Gateway server I…

    数据库 2023年6月9日
    082
  • Shell 第二章《流控》

    前言 无论什么编程语言都离不开条件判断(流控)。SHELL也不例外。例如,用户输入的密码不够长时提示用户,你太短了例如,用户输入了备份的目录,如果有目录继续备份,如果没有目录创建目…

    数据库 2023年6月14日
    097
  • MySQL数据库-数据表(上)

    数据表的基本操作. MySQL 数据库支持多种数据类型,大致可以分为 3 类:数值类型、日期和时间类型、字符串(字符)类型。 (1)数值类型 数值类型用于存储数字型数据,这些类型包…

    数据库 2023年6月11日
    082
  • 折腾 2 年多!我们终于见面了!

    2018年3月,我与张老师就这么在微信上聊了起来,起初我并没有写书的打算,我们之间只是通过讨论、交流的形式聊聊关于出书的方方面面。最终,敌不过张老师超强的专业能力、细致的解说与盛情…

    数据库 2023年6月9日
    0167
  • NO.6 HTML+CSS 笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    080
  • 设计模式之工厂方法

    一、工厂方法:简单工厂违背了单一职责原则,而且不利于扩展,于是衍生了工厂方法模式,该模式能很好地解决对扩展开放、对修改关闭的需求。 二、实现思路 :对每一个对象都创建一个对应的工厂…

    数据库 2023年6月14日
    0116
  • 【转】 一条 SQL 的执行过程详解

    MySQL 体系架构 – 连接池组件 1、负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。 …

    数据库 2023年5月24日
    0101
  • fiddler的mock数据与二次开发示例

    fiddler的使用记录 fiddler了解 上官网下载工具,然后安装使用,https://www.telerik.com/fiddler,如果对该工具不熟悉,还有直白的教程,看过…

    数据库 2023年6月6日
    0114
  • Centos7环境使用Mysql离线安装包安装Mysql5.7

    服务器环境:centos7 x64 需要安装:mysql5.7+ 1)检查mysql组合用户是否存在 2)若不存在,则创建mysql组和用户 对于版本选择,您可以选择以下两种方式:…

    数据库 2023年5月24日
    078
  • 使用docker实现mysql 8.0主从复制

    使用docker实现mysql 8.0主从复制 1.首先运行 docker pull mysql8.0 拉取镜像 docker pull mysql8.0 2.运行 docker …

    数据库 2023年6月16日
    085
  • Angel工作室ASP.NET(AngelExam)开源驾校考试系统正式发布

    一、Angel工作室ASP.NET(AngelExam)开源驾校考试系统简介 Angel工作室ASP.NET(AngelExam)驾校考试系统是基于asp.net mvc4.5(C…

    数据库 2023年6月14日
    080
  • Docker镜像操作

    Docker镜像操作 Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系…

    数据库 2023年6月14日
    0114
  • MySQL实战45讲 11

    11 | 怎么给字符串字段加索引? Q:如何在邮箱这样的字段上建立合理的索引? 用户表的定义: create table SUser( ID bigint unsigned pri…

    数据库 2023年6月16日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球