SSO 方案演进
背景介绍
随着业务与技术的发展,现今比以往任何时候都更需要单点登录 SSO 身份验证。
现在几乎每个网站都需要某种形式的身份验证才能访问其功能和内容。
随着网站和服务数量的增加,集中登录系统已成为一种必要。
在本文中,我们将研究 SSO 身份验证的方案演进。
问题描述
开发团队迟早会面临一个问题,已经开发了网站 A,新开发的网站 B 希望使用网站 A 的登录信息,而不是使用一套新的登录信息,如下图所示:

事实上,你可能还希望已经在网站 A 登录的用户自动完成网站 B 的登录。
问题的解决方案显然是实现跨不同域之间共享会话信息。但是,由于安全原因,浏览器会强制执行同源策略 - Same Origin Policy。
该策略规定,Cookies 只能由其创建者访问。换句话说,如果网站 A 和 网站 B 不是同域,网站 B 无法访问网站 A 的 Cookies,反之亦然,如下图所示:

SSO 其实就是要以某种方式解决不同域之间共享会话信息。
解决方案
一、同源解决方案
要解决不同域之间共享会话信息,一个最简单粗暴的办法就是让网站同域,如下图所示:

1. 用户浏览网站 A
2. 网站 A 发现无 *.domain.com 的 Cookies,重定向到认证中心
3. 认证中心要求用户使用账号密码登录
4. 认证中心保存 Cookies 到 *.domain.com
5. 重定向返回网站 A
6. 网站 A 读取 *.domain.com 下的 Cookies 完成校验,展示网站内容
7. 用户浏览网站 B
8. 网站 B 读取 *.domain.com 下的 Cookies 完成校验,展示网站内容
二、非同源解决方案
同源的解决方案可以满足大部分场景,但是针对一些多产品的场景,比如,阿里巴巴有天猫和淘宝两个产品,同源解决方案显然不能满足需求。
不同的 SSO 协议以不同的方式共享会话信息,但基本概念是相同的:有一个认证中心,执行身份验证,然后以某种方式与其他域共享会话信息。
其中一种方式是使用 JWT - JSON Web Token,认证中心使用 JWE - JSON Web Encryption 对用户信息进行加密,生成 JWT。
然后通过重定向的方式,把 Token 传回原始站点,Token 包含需要验证用户所需的所有信息。
由于 Token 是使用 JWT 加密的,除了认证中心外无法以任何方式修改它,具体流程如下:

1. 用户浏览网站 A
2. 网站 A 发现无 domain1.com 的 Cookies,重定向到认证中心
3. 认证中心要求用户使用账号密码登录
4. 认证中心保存 Cookies 到 auth.com
5. 重定向返回网站 A 并在 URL 携带验证用户信息的 Token
6. 网站 A 校验 Token 完成验证
7. 网站 A 保存 Cookies 到 domain1.com,供后续验证使用,并显示网站内容
8. 用户浏览网站 B
9. 网站 B 发现无 domain2.com 的 Cookies,重定向到认证中心
10. 认证中心发现有 auth.com 的 Cookies,对 Cookies 进行校验
11. 重定向返回网站 B 并在 URL 携带验证用户信息的 Token
12. 网站 B 校验 Token 完成验证
13. 网站 B 保存 Cookies 到 domain2.com,供后续验证使用,并显示网站内容
总结归纳
以上就是本文需要介绍的 SSO 相关内容,大家有问题的话欢迎在文章或者在公众号 - 跬步之巅留言交流。
SSO 方案演进的更多相关文章
- 基于Kubernetes(k8s)网络方案演进
VIP PaaS在接近两年时间里,基于kubernetes主要经历四次网络方案的变迁: 1. kubernetes + flannel 2. 基于Docker libnetwork的网络定制 3. k ...
- c++再探string之eager-copy、COW和SSO方案
在牛客网上看到一题字符串拷贝相关的题目,深入挖掘了下才发现原来C++中string的实现还是有好几种优化方法的. 原始题目是这样的: 关于代码输出正确的结果是()(Linux g++ 环境下编译运行) ...
- 什么是 SSO 与 CAS?
SSO SSO 是英文 Single Sign On 的缩写,翻译过来就是单点登录.顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果. 打个 ...
- 单点登录系统构建之二——SSO原理及CAS架构
基本概念 SSO(Single Sign On)单点登录,是在多个应用系统中,用户只需要登录一次就能访问所有相互信任的应用系统.它包括将这次的主要登录映射到其他应用中用户同一个用户的登录机制. SSO ...
- ONOS系统架构演进,实现高可用性解决方案
上一篇文章<ONOS高可用性和可扩展性实现初探>讲到了ONOS系统架构在高可用.可扩展方面技术概况,提到了系统在分布式集群中怎样保证数据的一致性.在数据终于一致性方面,ONOS採用了Gos ...
- 手把手教做单点登录(SSO)系列之一:概述与示例
本系列将由浅入深的结合示例.源码以及演示视频,手把手的带大家深入最新的单点登录SSO方案选型与架构开发实战.文末附5个满足不同单点登录场景的gif动画演示(如果看不清请在图片上右键用新窗口打开),本系 ...
- 最准确的单点登录SSO图示和讲解(有代码范例)|手把手教做单点登录(SSO)系列之二
写第一篇博客<手把手教做单点登录(SSO)系列之一:概述与示例>,就获得了园子里朋友们热情的评论和推荐,感谢各位. 我那篇文章同时发了CSDN和博客园.对比一下,更感受到博客园童鞋们的技术 ...
- 单点登录SSO:可一键运行的完整代码
单点登录方案不同于一个普通站点,它的部署比较繁琐:涉及到好几个站点,要改host.安装证书.配置HTTPS. 看到的不少这方面示例都是基于HTTP的,不认同这种简化: 1. 它体现不出混合HTTP/H ...
- 单点登录SSO:图示和讲解
目录 概述 示例运行效果动画 跨域Web SSO时序图 代码截图 几个基本概念 涉及的站点和页面 重点理解:单点登录的核心步骤 敢说最准确的单点登录图示,因为: 我严格对照所画时序图的每个步骤,开发了 ...
随机推荐
- My模板设计模式
模板模式 目标: 第一个设计模式:模板模式 步骤: 第一个设计模式:模板模式 讲解: 我们现在使用抽象类设计一个模板模式的应用, 例如在小学的时候,我们经常写作文,通常都是有模板可以套用的. 假如我现 ...
- 顺序、随机IO和Java多种读写文件性能对比
概述 对于磁盘的读写分为两种模式,顺序IO和随机IO. 随机IO存在一个寻址的过程,所以效率比较低.而顺序IO,相当于有一个物理索引,在读取的时候不需要寻找地址,效率很高. 基本流程 总体结构 我们编 ...
- 每日所学之自学习大数据的Linux环境的配置
今天开始配置环境,因为下载镜像文件需要很长时间,加上训练,所以Linux环境之配置了一半 VMware下载及安装教程(Window) 在安装虚拟机时需要下载镜像文件 下面是我下载的镜像文件的地址 Ce ...
- 将对象push到数组中组成对象数组
let items = { key:'', value:'' } for(let i = 0;i<len;i++){ items.value = _this.ills[i].sName; ite ...
- 将子分支代码merge到主分支master分支
1.首先切换到子分支: git checkout develop2.使用git pull 把分支代码pull下来: git pull3.切换到主分支: git checkout master4.把分支 ...
- Java 值传递 or 引用传递?
Java 方法传参 值传递 or 引用传递? 结论:Java采用的是值传递 先建立一些基础的概念 什么是值传递和引用传递? 值传递(pass by value):是指在调用函数时将实际参数复制一份传递 ...
- tkinter GUI编程
tkinter编程概述 tkinter模块包含在Python的基本安装包中.使用tkinter模块编写的GUI程序是跨平台的.可在windows.UNIX.Linux以及Macintonsh OS X ...
- 基于Apache Hudi和Debezium构建CDC入湖管道
从 Hudi v0.10.0 开始,我们很高兴地宣布推出适用于 Deltastreamer 的 Debezium 源,它提供从 Postgres 和 MySQL 数据库到数据湖的变更捕获数据 (CDC ...
- Git---git的常用操作
git三种状态的转换 git状态切换时的常用命令 1. git管理工作目录 git init # 会增加.git文件夹 2. git的三种状态 工作区 暂存区 本地仓库 3. 提交到暂存区 git a ...
- ethool的使用
ethtool命令 网络配置 ethtool命令用于获取以太网卡的配置信息,或者修改这些配置.这个命令比较复杂,功能特别多 语法 ethtool [ -a | -c | -g | -i | -d | ...