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

SSO(单点登陆)

Single Sign On 一处登陆、处处可用

0、前置概念:

1)、单点登录业务介绍

早期单一服务器,用户认证。

缺点:单点性能压力,无法扩展 分布式,

SSO(single sign on)模式 

解决 :

        用户身份信息独立管理,更好的分布式管理。

        可以自己扩展安全策略

        跨域不是问题

缺点:

         认证服务器访问压力较大。 

2)、几个基本概念 

2.1 什么是跨域 Web SSO

域名通过“.”号切分后,从右往左看,不包含“.”的是顶级域名,包含一个“.”的是一级域名, 包含两个“.”的是二级域名,以此类推。

例如对网址 http://www.cnblogs.com/baibaomen,域名部分是 www.cnblogs.com。 用“.”拆分后从右往左看:

        cookie.setDomain(“.cnblogs.com”);//最多设置到本域的一级域名这里

        cookie.setDomain(“.baidu.com”);//最多设置到本域的一级域名这里

”com”不包含“.”,是顶级域名; “cnblogs.com”包含一个“.”,是一级域名;

www.cnblogs.com 包含两个“.”,是二级域名。

blog.cnblogs.com

news.cnblogs.com

跨域 Web SSO 指的是针对 Web 站点,各级域名不同都能处理的单点登录方案。

2.2 浏览器读写 cookie 的安全性限制

浏览器读写 cookie 的安全性限制:一级或顶级域名不同的网站, 无法读到彼此写的 cookie。

所以 baidu.com 无法读到 cnblogs.com 写的 cookie。 一级域名相同,只是二级或更高级域名不同的站点,可以通过设置 domain 参数共享 cookie

读写。这种场景可以选择不跨域的 SSO 方案。 域名相同,只是 https 和 http 协议不同的 URL,默认 cookie 可以共享。知道这一点对处 理 SSO 服务中心要登出

2.3 http 协议是无状态协议

浏览器访问服务器时,要让服务器知道 你是谁,只有两种方式:

方式一:把“你是谁”写入 cookie。它会随每次 HTTP 请求带到服务端;

方式二:在 URL、表单数据中带上你的用户信息(也可能在 HTTP 头部)。这种方式依赖 于从特定的网页入口进入,因为只有走特定的入口,才有机会拼装出相应的信息,提交到服 务端。

大部分 SSO 需求都希望不依赖特定的网页入口(集成门户除外),所以后一种方式有局限 性。适应性强的方式是第一种,即在浏览器通过 cookie 保存用户信息相关凭据,随每次请 求传递到服务端。我们采用的方案是第一种。

1、Cookie 接入方式

2、Token 接入方式 

类似社交登陆

3、有状态登录

为了保证客户端 cookie 的安全性,服务端需要记录每次会话的客户端信息,从而识别客户 端身份,根据用户身份进行请求的处理,典型的设计如 tomcat 中的 session。

例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的 session。然后下次请求,用户携带 cookie 值来,我们就能识别到对应 session, 从而找到用户的信息。

缺点是什么?

- 服务端保存大量数据,增加服务端压力

- 服务端保存用户状态,无法进行水平扩展

- 客户端请求依赖服务端,多次请求必须访问同一台服务器

即使使用 redis 保存用户的信息,也会损耗服务器资源。

4、无状态登录

微服务集群中的每个服务,对外提供的都是 Rest 风格的接口。而 Rest 风格的一个最重要的 规范就是:服务的无状态性,即:

- 服务端不保存任何客户端请求者信息

- 客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份 带来的好处是什么呢?

- 客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务

- 服务端的集群和状态对客户端透明

- 服务端可以任意的迁移和伸缩

- 减小服务端存储压力

5、集成社交登陆

1)、用户点击不同的社交登陆按钮,先来我们自己的服务器

https://passport.csdn.net/v1/register/authorization?authType=qq /sina 

2)、命令浏览器重定向到用户授权页 

用户确认授权

https://graph.qq.com/oauth2.0/authorize

3)、qq 返回的响应,会命令用户重定向到指定位置

4)、服务器的这个位置就可以收到我们的 code 码

收到 code 码,服务器自己用 code 交换 access_token 令牌,并获取到用户的信息。给浏览器 只给用户的信息即可;

access_token=UUID

浏览器访问带 UUID_token 而不是 access_token;

 

相关文章:

SSO(单点登陆)

Single Sign On 一处登陆、处处可用 0、前置概念: 1)、单点登录业务介绍 早期单一服务器,用户认证。 缺点:单点性能压力,无法扩展 分布式, SSO(single sign on)模式 解决 : 用户身份信息独…...

线程和QObjects

QObject的可重入性: QThread继承了QObject,它发出信号以指示线程开始或完成执行,并提供一些插槽。 QObjects可以在多个线程中使用发出调用其他线程中槽的信号,并将事件发布到在其他线程中“活动”的对象。这是可能的&#xff0…...

最新中文版FL Studio21水果软件下载安装图文教程

FL Studio是目前流行广泛使用人数最多音乐编曲制作软件,这款软件相信广大网友并不陌生,今天带来的是FL中文版本,所有的功能都能在线编辑,用户直接就能操作,同时因为是21水果是最新版,所以增加了新的功能&am…...

pandas数据分析35——多个数据框实现笛卡尔积

什么是笛卡尔积。就是遍历所有组合的可能性。 比如第一个盒子有[1,2,3]三个号码球,第二个盒子有[4,5]两个号码球。那么从每个盒子里面分别拿一个球共有3*2两种可能性,其集合就是{[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]},这个就是笛卡尔积。 三个盒子也是…...

【C语言学习笔记】:数组倒序排列,数组倒置

数组倒置就是将数组元素中的数据倒过来&#xff01; 举个例子&#xff0c;比如下面程序&#xff1a; #include <stdio.h>int main(void) { int a[5] {1, 2, 3, 4, 5}; int b[5]; //用来存放倒置后的数据 int i, j; for (i0, j4; i<5, j>0; i, --j)…...

sni+tomcat漏洞复现

sni SNI产生背景 SSL以及TLS&#xff08;SSL的升级版&#xff09;为客户端与服务器端进行安全连接提供了条件。但是&#xff0c;由于当时技术限制&#xff0c;SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计&#xff0c;PKI 认为一个服务器只为一个…...

Linux ALSA 之十:ALSA ASOC Machine Driver

ALSA ASOC Machine Driver一、Machine 简介二、ASoC Machine Driver2.1 Machine Driver 的 Platform Driver & Platform Device 驱动模型2.2 在 Probe() 中注册声卡三、snd_soc_register_card 函数3.1 bind DAIs3.2 New a sound card3.3 Create card new widgets3.4 Probe …...

Spring 面试题(一):Spring 如何处理全局异常?

❤️ 博客首页&#xff1a;水滴技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; &#x1f338; 订阅专栏&#xff1a;Spring 教程&#xff1a;从入门到精通 文章目录1、如何处理全局异常2、代码示例2.1、定义统一的“响应结果对象”2.2、…...

Threadlocal为何引发内存泄漏问题

首先我们要先了解什么是泄漏问题和什么是内存溢出 内存泄漏表示程序员申请了内存&#xff0c;但是该内存一直无法被释放 内存溢出表示申请内存不足&#xff0c;就会报错 为何引发内存泄漏问题 因为每个线程都有自己独立的ThreadLocalMap对象&#xff0c;key为ThreadLocal&…...

如何写好 Python 的 Lambda 函数?

当你需要完成一件小工作时&#xff0c;在本地环境中使用这个函数&#xff0c;可以让工作如此得心应手&#xff0c;它就是 Lambda 函数。 Lambda 函数是 Python 中的匿名函数。有些人将它们简称为lambdas&#xff0c;它们的语法如下&#xff1a; lambda arguments: expression…...

大数据技术架构(组件)32——Spark:Spark SQL--Execute Engine

2.2、Spark SQL2.2.1、Execute EngineSparkSql的整体提交执行流程和Hive的执行流程基本上一致。站在通用的角度&#xff0c;对于SparkSql来说&#xff0c;从Sql到Spark的RDD执行需要经历两个大的阶段&#xff1a;逻辑计划和物理计划逻辑计划层面会把用户提交的sql转换成树型结构…...

Leetcode.1138 字母板上的路径

题目链接 Leetcode.1138 字母板上的路径 Rating &#xff1a; 1411 题目描述 我们从一块字母板上的位置 (0, 0)出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqr…...

一个自动配置 opengrok 多项目的脚本

前段时间在服务器上配置 opengrok 阅读代码&#xff0c;项目有很多个&#xff0c;一个一个手动配置比较繁琐。 我从搭建 tomcat 和 opengrok&#xff0c;到配置和索引完 5 个 Android 项目&#xff0c;用了差不多一整天。 要是再让我手动配置几个项目&#xff0c;估计真要崩溃…...

JAVA同步代码块 同步方法

JAVA同步代码块 & 同步方法 为了解决多线程操作共享数据时产生的安全问题 例如以下代码 if (ticket < 0) {// 卖完了break; } else {ticket--;System.out.println(Thread.currentThread().getName() "在卖票&#xff0c;还剩下" ticket "张")…...

分享111个助理类简历模板,总有一款适合您

分享111个助理类简历模板&#xff0c;总有一款适合您 111个助理类简历模板下载链接&#xff1a;https://pan.baidu.com/s/1JafYuLPQMmq37K4V0wiqWA?pwd8y54 提取码&#xff1a;8y54 Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj 设计师助理…...

Allegro如何更改临时高亮的颜色设置操作指导

Allegro如何更改临时高亮的颜色设置操作指导 在用Allegro做PCB设计的时候,当移动或者高亮某个对象之前,会被临时高亮一个颜色,方便查看,类似下图 运行高亮命令的时候,器件被临时高亮成了白色 软件默认的是白色,如何更改成其它颜色? 具体操作如下 点击Display选择Color…...

知识图谱嵌入技术研究综述

作者 张天成 1 , * 田 雪 1 , * 孙相会 1 , * 于明鹤 2 , * 孙艳红 1 , * 于 戈 摘要 知识图谱 是一种用图模型来描述知识和建模事物之间的关联关系的技术。 知识图谱嵌入 作为一种被广泛采用的知识表示方法。 主要思想是将知识图谱中的实体和关系嵌入到连续的向量空间中…...

Scratch少儿编程案例-水果忍者-超完整

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

练 习

1.判断三个中最重的//依次输入相应的人的体重double people1, people2, people3;cout << "请输入第一个人体重" << endl;cin >> people1;cout << "请输入第二个人体重" << endl;cin >> people2;cout << "请…...

Urho3D整体结构

Urho3D引擎编译成一个库。从概念上讲&#xff0c;它由几个代表不同子系统或功能的“子库”组成。其中每个都位于Source/Urho3D目录下的子目录中&#xff1a; 容器:提供STL替换类和共享指针。数学:提供相交测试中使用的矢量、四元数和矩阵类型以及几何形状。Core:提供执行上下文…...

大数据技术之Hudi

Hudi概述 1.1 Hudi简介 Apache Hudi&#xff08;Hadoop Upserts Delete and Incremental&#xff09;是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发&a…...

libxlsxwriter条件格式

今天来看一个libxlsxwriter的高级用法&#xff1a;一个条件格式的示例。 说它“高级”&#xff0c;也是基于非Excel专家的小白们的视角。对&#xff0c;没错&#xff0c;本小白正是这样的小白。 1 一个简单的问题 来看我们今天的场景问题&#xff1a;有一列数据&#xff0c;有…...

nodejs+vue+elementui在线求助系统vscode

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进…...

电子技术——BJT差分输入对

电子技术——BJT差分输入对 本节我们来讨论BJT差分输入对。 共模输入 下图是BJT差分输入对的基本原理图&#xff1a; 首先我们考虑两端输入共模信号 VCMV_{CM}VCM​ &#xff1a; 此时 vB1vB2VCMv_{B1} v_{B2} V_{CM}vB1​vB2​VCM​ 因为电路的对称结构&#xff0c;所以 i…...

[MySQL教程②] - MySQL介绍和发展史

目录 ❤ MySQL介绍 ❤ 什么是数据库 ❤ 什么是数据 ❤ 数据库管理系统 ❤ NoSQL特性总览 ❤ NoSQL的分类、特点、典型产品 ❤ 常见的数据库产品有哪些&#xff1f; ❤ Oracle公司产品介绍 Oracle数据库版本介绍 Oracle的市场应用 MySQL数据库版本介绍 MyS…...

多表查询--实例

1 创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#xff1a; CREATE TABLE score ( id INT…...

Differentially Private Grids for Geospatial Data

文章目录abstractintroabstract 在本文中&#xff0c;我们解决了为二维数据集(如地理空间数据集)构建差异私有概要的问题。目前最先进的方法通过执行数据域的递归二进制分区和构造分区的层次结构来工作。我们表明&#xff0c;基于分区的概要方法的关键挑战在于选择正确的分区粒…...

Java学习记录day8

类与对象 继承例题 https://www.bilibili.com/video/BV1PU4y1E7nX?p55&vd_source8f80327daa664c039f5c342a25bcbbae&#xff08;B站千峰马剑威Java基础入门视频第P55&#xff0c;记录的重要学习内容之一&#xff09; final关键字 作用&#xff1a; 声明一个常量&…...

Solon2 开发之容器,三、注入或手动获取 Bean

1、如何注入Bean&#xff1f; 先了解一下Bean生命周期的简化版&#xff1a; 运行构建函数尝试字段注入&#xff08;有时同步注入&#xff0c;没时订阅注入。不会有相互依赖而卡住的问题&#xff09;Init 函数&#xff08;是在容器初始化完成后才执行&#xff09;…释放&#…...

微信小程序_调用openAi搭建虚拟伙伴聊天

微信小程序_调用openAi搭建虚拟伙伴聊天背景效果关于账号注册接口实现8行python搞定小程序实现页面结构数据逻辑结速背景 从2022年的年底&#xff0c;网上都是chagpt的传说&#xff0c;个人理解这个chatgpt是模型优化训练&#xff0c;我们在用chatgpt的时候就在优化这个模型&a…...