SSO 方案演进

1

背景介绍       

随着业务与技术的发展,现今比以往任何时候都更需要单点登录 SSO 身份验证。

现在几乎每个网站都需要某种形式的身份验证才能访问其功能和内容。

随着网站和服务数量的增加,集中登录系统已成为一种必要。

在本文中,我们将讨论下 SSO 身份验证的方案演进。

2

问题描述       

开发团队迟早会面临一个问题,已经开发了 网站 A,新开发的 网站 B 希望使用 网站 A 的登录信息,而不是使用一套新的登录信息,如下图所示:

dfce0642ae517164d5916cdeec81476e.png

事实上,你可能还希望已经在 网站 A 登录的用户自动完成 网站 B 的登录。

问题的解决方案显然是实现跨不同域之间共享会话信息。

但是,由于安全原因,浏览器会强制执行同源策略 - Same Origin Policy。

该策略规定,Cookies 只能由其创建者访问。

换句话说,如果 网站 A 和 网站 B 不是同域,网站 B 无法访问 网站 A 的 Cookies,反之亦然,如下图所示:

bc7f6bb935a7beab39fda74cb2ad5b6a.png

SSO 其实就是要以某种方式解决不同域之间共享会话信息。

3

解决方案       

一、同源解决方案

要解决不同域之间共享会话信息,一个最简单粗暴的办法就是让网站同域,如下图所示:

e52362ffef72857d2da56a6bf4961c4c.png

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 加密的,除了认证中心外无法以任何方式修改它,具体流程如下:

091d3319188f30954511da189c8f9b87.png

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,供后续验证使用,并显示网站内容

4

总结归纳       

以上就是本文需要介绍的 SSO 相关内容,大家有问题的话欢迎在文章或者在公众号 - 跬步之巅留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础看得懂的C++入门教程 》——(8)搞定二维数组与循环嵌套

一、学习目标 了解二维数组的使用方法了解循环嵌套的使用方法 目录 预备第一篇,使用软件介绍在这一篇,C与C使用的软件是一样的,查看这篇即可:《软件介绍》 想了解编译原理和学习方法点这篇,学习方法和一些原理C与C都…

常见的Ubuntu命令30条(一)

Ubuntu命令是指在Ubuntu操作系统中用于执行各种任务和操作的命令行指令。这些命令可以用于管理系统、配置网络、安装软件、浏览文件等。Ubuntu命令通常在终端(Terminal)应用程序中输入并执行。 在Ubuntu中,有许多常用的命令和指令。以下是一…

【计算机图形学】实验:C#.net环境下的图形变换完整实验操作流程

一、实验目的: 熟练掌握在.net环境下对图形的变换方法。 二、实验准备: 学习图形变换的基本算法,如平移、旋转、缩放等,以及在.net环境下变换图形的基本方法。 三、实验内容: 在.net环境中利用变换图形的基本方法对图形进行变换,包括平移、旋转、缩放、对称、复合变…

《零基础看得懂的C++入门教程 》——(9)结构体原来如此

一、学习目标 了解C语言的结构体的使用方法了解C语言结构体的结构的赋值了解多种C语言结构体变量的赋值方法和取值方法 目录 预备第一篇,使用软件介绍在这一篇,C与C使用的软件是一样的,查看这篇即可:《软件介绍》 想了解编译原…

微信小程序python token验证_微信小程序python 用户认证

按流程图来先通过wx.login()获取code,再通过我们后台配置的接口获取openid和session_key// 登录wx.login({success: res > {console.log(res)// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.request({url: api.GET_OPENID, //data: {js_code: res.code},succes…

C#实用技巧之:将图标打包进DLL并读取

概述个人的项目界面有时候需要用到很多图标,这些图片可以建立一个文件夹单独存放,但有时涉及到多台设备部署的话,每台设备都需要随项目一起拷贝过去,如果忘记了界面显示就会出问题,有没有更好的办法解决?有…

【计算机图形学】实验:VB.net环境下的绘制贝赛尔(Bezier)自由曲线完整实验操作步骤

一、实验目的 熟练掌握在.net环境下绘制贝赛尔自由曲线。 二、实验准备 学习生成贝赛尔自由曲线的基本算法,以及在.net环境下绘制贝赛尔自由曲线的基本方法(DrawBezier和DrawBeziers)。 三、实验内容 在.net环境中绘制二次、三次贝赛尔曲线。 四、实验过程及步骤 (包…

《零基础看得懂的C++入门教程 》——(10)面向对象

一、学习目标 了解C类是什么了解类对象与类型修饰一样进行创建了解了类的属性如何使用了解了类方法的使用方法 目录 预备第一篇,使用软件介绍在这一篇,C与C使用的软件是一样的,查看这篇即可:《软件介绍》 想了解编译原理和学习…

浅谈JSONP

这是我在13年初写的文章,当时懵懵懂懂写下了自己对JSONP的理解。 文章原文 博客 欢迎订阅 提到JSONP,我当时在网上找了无数帖子也没有看懂它。那些文章大同小异,都是讲到JSONP原理以后就戛然而止,把我们这些初学者搞得云里雾里。所…

Asp.Net Core 7 preview 4 重磅新特性--限流

前言限流是应对流量暴增或某些用户恶意攻击等场景的重要手段之一,然而微软官方从未支持这一重要特性,AspNetCoreRateLimit这一第三方库限流库一般作为首选使用,然而其配置参数过于繁多,对使用者造成较大的学习成本。令人高兴的是&…

【计算机图形学】实验:C#.net环境下采用GDI+图形特技处理案例教程

一、实验目的 掌握在.net环境下对图形特技的处理方法。 二、实验准备 学习在.net环境下读取图像文件、改变颜色等基本知识。 三、实验内容 在.net环境中实现对图像的灰度化处理、柔化和锐化、底片滤镜、淡入淡出以及浮雕、油画和木刻等艺术效果。 四、实验过程及步骤 (…

Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

如果开发的应用用户较多,那么必须保证应用在多个版本不同的设备上能够正确的运行。这就要求对各个版本比较熟悉,知道在什么版本中加入了什么新的功能或特性。但是Android的版本太多了,是个令人头疼的问题。如果想了解Android的版本差异&#…

[python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程;文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘述过多的基础内容,基础内…

【计算机图形学】实验:VB.net环境下的综合绘图与交互技术案例教程

一、实验目的 掌握在.net环境下的绘图软件界面设计与交互技术。 二、实验准备 学习在.net环境下的界面设计的一般原理与交互技术等基本知识。 三、实验内容 将前7个实验内容集成到一个界面下,如直线段、圆、矩形与曲线的绘制填充,以及对图像的处理&…

从头开始敲代码之《从BaseApplication/Activity开始》

转载请注明出处王亟亟的大牛之路 其安易持,其未兆易谋;其脆易泮,其微易散。为之于未有,治之于未乱。合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。为者败之…

查缺补漏系统学习 EF Core 6 - 原始 SQL 查询

推荐关注「码侠江湖」加星标,时刻不忘江湖事这是 EF Core 系列的第五篇文章,上一篇文章盘点了 EF Core 中的几种数据查询方式。但是有有时候,我们可能无法用标准的 LINQ 方法完成查询任务。或者编译后的 LINQ 查询,没有我们想要的…

【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取

一、学习目标 了解图片的结构属性了解如何捕获视频了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld [[python opencv 计…

C# WPF后台动态添加控件(经典)

概述在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本节举例介绍这个问题。这里要用到UniformGrid布局,UniformGrid 是一种横向的网格分割、…

【Envi风暴】Envi 5.4遥感影像镶嵌原来如此简单!

图像镶嵌指是在一定的数学基础控制下,把多景相邻的遥感图像拼接成一个大范围、无缝图像的过程。 Envi的图像镶嵌功能提供交互式的方式将没有地理坐标或者地理坐标的多幅图像合并,生成一幅单一的合成图像。镶嵌功能提供了透明处理、匀色、羽化等功能。 下面演示基于地理坐标(…

[python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

一、学习目标 了解图片的通道与数组结构了解使用numpy创建一个图片了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的hel…