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时序图 代码截图 几个基本概念 涉及的站点和页面 重点理解:单点登录的核心步骤 敢说最准确的单点登录图示,因为: 我严格对照所画时序图的每个步骤,开发了 ...
随机推荐
- Tomcat安装流程(无图简易)
笔记:web->3小结
- SVN回滚步骤
- 动态规划 洛谷P1616 疯狂的采药
动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...
- weevely使用小结
Weevely 写在前面 由于比赛不确定会不会提供菜刀或者蚁剑,这里我稍微对weevely进行简单介绍一下,具体还是请看官方文档,官方文档讲的很详细(前提你英语嘚不错) 官方文档:https://gi ...
- chrome插件one-read开发1:准备
阅读我的博客文章:chrome插件one-read开发:准备 前言 为啥要做这个,因为我原本想用chrome做一个书签管理的东西,但是很久没有碰过chrome的插件开发了.所以先做一个简单的,来熟悉下 ...
- VueJs项目笔记
======================知识点总结=========================== 一.keep-alive(实现页面的缓存) 二. 移动端固定定位的解决方案 三. Vue表 ...
- ps基础总结
1.复制图层:首先选中移动工具(V),鼠标右键选中需要复制的图层(快捷方式:上面勾选自动选择),接着一只手按住Alt键,另一只手点击鼠标左键(不松开),往左往右移动即可.若是对多个图层起作用,就可将需 ...
- 【Android开发】Webview 和 JS 交互问题
一,安卓原生调用JS代码 1,js代码: function handlePasteDataFromApp(pasteStr) { showInfo('pasteData: aaaaa' + JSON. ...
- 一个chome的广告拦截小插件
先附上下载地址:https://chromecj.com/productivity/2015-03/391.html 可以屏蔽绝大多数广告啊,浏览器用起来神清气爽! 下载完成后有一个名字为这个的文件, ...
- jboss修改内存
在修改配置文件,在 <JBOSS_HOME> /bin/stadalone.conf中 找到并修改 如图