SSO笔记

news2024/11/16 5:47:00

自己学习做的笔记.没有具体代码

单点登录:多系统,单一位置登录,实现多系统同时登录的一种技术.

也就是说多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

和三方登录Oauth2是有区别的.Oauth2属于三方登录.通常是某系统,使用其他系统的用户,实现本系统登录的方式.比如京东中使用微信登录

我们可以通过Oauth2实现单点登录,但是Oauth2不是单点登录

单点登录和三方登录不是一回事,不要混肴

解决单点登录的实现方案很多,Session跨域,SpringSession共享,NginxSession共享,最主要,最常用的通过Token技术实现.相对来说用Session和JWT来实现单点登录的更多些

一、 Session 跨域
所谓 Session 跨域就是摒弃了系统(Tomcat)提供的 Session ,而使用自定义的类似 Session
的机制来保存客户端数据的一种解决方案。
如:通过设置 cookie domain 来实现 cookie 的跨域传递。在 cookie 中传递一个自定义
session_id 。这个 session_id 是客户端的唯一标记。将这个标记作为 key ,将客户端需要保
存的数据作为 value ,在服务端进行保存(数据库保存或 NoSQL 保存)。这种机制就是 Session
的跨域解决。 绝大多数用 domain 来实现 cookie 的跨域传递实现,但是也可以用请求头信息实现.JWT技术一般用于头信息来实现跨域单点登录
-----------------------------------------------------------------------------------------------------------------------------
核心技术点:
1.HTTP,Cookie与Session
2.Cookie与Session的关系
3.Cookie,SSO令牌的载体
4.决定Cookie内容,生命周期和有效范围的7个属性
        1)name和value       key=value
        2)expires                过期时间
        3)path和domain      
        4)httpOnly(设置了HttpOnly的话用JS是获取不到cookie的)和secure(只在https时有效.http不可见)
5.JavaScript操作Cookie的方法       document.cookie(获取所有cookie字符串
C1=TEST1;C2=TEST2;C3=TEST3)
新增cookie     document.cookie="c4=test4"   
替换   document.cookie="c4=newtest4"
这里注意下,JS可以直接引入Cookie依赖操作
httpOnly不允许js操作,因此这里无法设置httpOnly,因为没任何意义
设置时间path  document.cookie="c4=newtest4;expires="+[GMT时间]+";path=/xxxx;domain=www.amamaw.com;secure"   secure这样写就是true
6.Java Web应用中操作Cookie的方法
7.filter.Web层拦截
大概的了解下Cookie

 HttpSession session这个参数,有兴趣可以试试,有这个参数和没这个参数,对Cookie有什么影响

Cookie并没有真正的删除方式,可以设置存活时间,比如说cookie.setMaxAge(-1000),当浏览器接受到这个时候,认为该Cookie的存活时间已经过期,就不会再发送回服务端了.也可以进行Cookie覆盖,但是进行Cookie覆盖的时候必须name相同外Path,domain属性相同,不然浏览器会认为是两个不同的Cookie

注意:cookie存活时间设置为-1000 浏览器F12可能会看到还会携带过来,但是服务器接收时候是没有这个Cookie的   存活时间设置为0的话,浏览器看不到携带过来,当然服务端也不能收到这应该是浏览器的原因

关于Path和domain可以自己测试,domain就是域,在域相同的时候会携带

关于Cookie的几点

1.过多过大的Cookie浪费网络流浪

2.不同浏览器对Cookie有个数限制

3.浏览器对Cookie有大小限制

4.Cookie保存在客户端,不要在Cookie里存放敏感信息

Cookie做为SSO令牌载体,伴随着的一个问题,既然Cookie创建后,域,Path等相同会伴随着每个请求,那该在什么时间点,读取Cookie对Cookie进行权限判断?肯定不会在每个业务请求都去判断
那么就可以扯到拦截层, Filter和Web的拦截器,监听器就不扯了吧,越扯越远写不完了
SpringBoot中实现过滤器的几种方式

这里注意下,高版本的SpringBoot很可能导致此配置无效,记得当时用的2.7.1好像,改回2.2.0以下就OK了,至于具体从哪个版本开始改动的没具体了解.

第二种直接加@Compent注解   但是这样的测试是默认所有请求都经过该过滤器,不过建议使用第三种,因不知道会不会出问题

 第三种

自定义一个过滤器进行配置

 同域时,Cookie传递可以设置Path为"/"

不同域是.依靠domain

二、 Spring Session 共享
spring-session 技术是 spring 提供的用于处理集群会话共享的解决方案。 spring-session
技术是将用户 session 数据保存到三方存储容器中,如: mysql redis 等。
注意:Spring-session 技术是解决同域名下的多服务器集群 session 共享问题的。不能解决跨域
session 共享问题。注意不能解决跨域共享!!!注意不能解决跨域共享!!!注意不能解决跨域共享!!!
三、 Nginx Session 共享
nginx 中的 ip_hash 技术能够将某个 ip 的请求定向到同一台后端,这样一来这个 ip 下的
某个客户端和某个后端就能建立起稳固的 session
ip_hash 是容易理解的,但是因为仅仅能用 ip 这个因子来分配后端, 因此 ip_hash 是有
缺陷的,不能在一些情况下使用:
nginx 不是最前端的服务器。
ip_hash 要求 nginx 一定是最前端的服务器,否则 nginx 得不到正确 ip ,就不能根据 ip
hash 。譬如使用的是 squid 为最前端,那么 nginx ip 时只能得到 squid 的服务器 ip 地址,
用这个地址来作分流是肯定错乱的。
nginx 的后端还有其它方式的负载均衡。
假如 nginx 后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端
的请求肯定不能定位到同一台 session 应用服务器上。
nginx演示配置  通过开启ip_hash来实现Session对应服务器,但是不推荐使用

四、 Token 机制(SSO单点登录主流实现方案)
JSON Web Token     JWT 可以当成实现Token的有效方案
JWT是一种紧凑(数据量小)且自包含(使用JWT的payload记录用户必要且不隐私的数据,这样减少数据库访问),用于多方传递JSON对象的技术.
JWT一般用于处理用户身份验证或数据信息交换.
JWT 数据结构
JWT 的数据结构是 : A.B.C 。 由字符点‘.’来分隔三部分数据。
A - header 头信息:{“alg”: “ 加密算法名称 ”, “typ” : “JWT”}
B - payload (有效荷载):三部分唯一可以不传的,但是不传不代表没有
payload中常用信息有已注册信息(registered claims),公开数据(public claims),私有数据(private claims),公开数据和私有数据可以自定义,但是不要和已注册信息Key重名,可以配置
C - Signature 签名:
header 中定义的加密算法,将 header payload
进行加密,并使用点进行连接。如:加密后的 head. 加密后的 payload 。再使用相同的加密算
法,对加密后的数据和签名信息进行加密。得到最终结果。
大致执行流程:

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

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

相关文章

【机器学习】多分类及多标签分类算法(含源代码)

目录:多分类及多标签分类算法一、单标签二分类问题1.1 单标签二分类算法原理二、单标签多分类问题2.1 ovo2.1.1 手写代码2.1.2 调用API2.2 ovr2.2.1 手写代码2.2.2 调用API2.3 OvO和OvR的区别2.4 Error Correcting三、多标签算法问题3.1 Problem Transformation Met…

Vue3 – Composition API(二)

1、computed函数使用 1.1、computed 在前面我们讲解过计算属性computed:当我们的某些属性是依赖其他状态时,我们可以使用计算属性来处理 在前面的Options API中,我们是使用computed选项来完成的;在Composition API中&#xff0c…

Shell语法

一、概念 Shell 是命令行与操作系统沟通的桥梁,也是一门语言。 Shell 脚本可以直接在命令行中执行,也可以作为文件方便复用。 Linux中常见的 Shell 脚本有: Bourne Shell(/usr/bin/sh或/bin/sh)Bourne Again Shell(/bin/bash)C Shell(/us…

《啊哈算法第四章之bfs》(17张图解)

源自《啊哈算法》 目录 bfs正文 题目 思路 完整代码1 完整代码2 再解炸弹人 题目 思路 完整代码1 完整代码2 总结 bfs正文 第四章--深度优先搜索中,我们用dfs找到了寻找小哈的最短路径 接下来,我们要用bfs(Breadth First Sear…

04 |「链表」简析

前言 前言:研究一个数据结构的时候,首先讲的是增删改查。 文章目录前言一、链表简介1. 含义2. 节点组成3. 存储方式1)数据在内存中的存储方式2)单链表在内存中的存储方式3)双链表在内存中的存储方式4)循环链…

python-38-降低内存开销的python迭代器

【进阶Python】第五讲:迭代器与生成器 python 迭代器和生成器 迭代是Python中常用且非常强大的一个功能,它可以用于访问集合、列表、字符串、字典等数据结构的元素。 我们经常使用循环和条件语句,我们也清楚哪些是可以迭代访问,但…

结构型模式-代理模式

1.概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译…

Nacos 配置中心源码讲解

目录 1. 配置中心的优点 2. 配置模型结构 3. 配置中心 Server 端实现原理 3.1 新建配置 / 发布配置 3.2 查询配置 4. 配置中心 Client 端实现原理 4.1 发布配置 4.2 查询配置 4.3 监听机制 Listener 1. 配置中心的优点 运行时动态修改系统参数配置,不用重启…

排序算法解析:快排,归并 (全)

一、快排原始快排 算法思想:ps:排序的效果其实就是使一个数列中的每个数都满足左边数比它小、右边数比它大(假设升序)。接下来我们来了解快排:多次递归遍历,每单次遍历,设定一个限定值&#xff…

02 |「数据结构、逻辑结构、物理结构」基本概念简析

前言 前言:简析数据结构、逻辑结构、物理结构。 文章目录前言一、数据结构1. 简介2. 数据3. 结构4. 分析5. 分类1)线性结构(线性表)2)树结构3)图结构二、逻辑结构与物理结构1. 为什么要有逻辑结构和物理结构…

SpringBoot+Vue--前端搭建-笔记1

前端搭建 首先安装node.js(百度) 官网下载地址:http://nodejs.cn/download 以前写的关于npm 后端了解的npm_biubiubiu0706的博客-CSDN博客 安装Node.js淘宝镜像加速器(cnpm) npm install cnpm -g(可以不安装) #建议使用如下语句解决npm速度慢的问题 好比设置仓…

代码随想录算法训练营三期 day 24 - 回溯 (1) (补)

回溯算法理论基础 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。 回溯法的效率 回溯的本质是穷举&…

【手把手教你学51单片机】中断的优先级

注:本文章转载自《手把手教你学习51单片机》!因转载需要原文链接,故无法选择转载! 如若侵权,请联系我进行删除!上传至网络博客目的为了记录自己学习的过程的同时,同时能够帮助其他一同学习的小伙…

第四十三章 动态规划——最长单调序列模型

第四十三章 动态规划——最长单调序列模型一、最长单调序列模型1、模型母题2、思路分析(两种方法:DP,贪心)二、模型的应用1、AcWing 1017. 怪盗基德的滑翔翼(1)问题(2)分析&#xff…

C规范编辑笔记(十四)

往期文章: C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) C规范编辑笔记(七) C规范编辑笔记(八) C规范编辑笔记(九) C规则编辑笔记(十) C规范编辑笔记(十一) C规范编辑笔记(十二) C规范编辑笔记(…

Linux进程学习【一】

✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…

Linux基本功系列之rename命令实战

文章目录一. rename 命令介绍二. 语法格式及常用选项三. 参考案例3.1 将当前目录下所有.cfg的文件,替换为.txt结尾3.2 将所有出现mufeng的部分都替换为mufeng13.3 将mufeng0开头都变成mufeng00开头3.4 rename支持正则表示式总结前言🚀🚀&…

2023-1-22 刷题情况

积水面积 先祝大家新年快乐,新的一年,万事如意。 题目描述 一组正整数,分别表示由正方体叠起的柱子的高度。若某高度值为 xxx,表示由 xxx 个正立方的方块叠起(如下图,0≤x≤50000 \le x \le 50000≤x≤5…

卷积神经网络进阶--基础知识

卷积神经网络进阶 b站课程链接碳基生物都能学会的神经网络(跳着看的) 因为我用的是pytorch,而该课程是用tenserflow的,所以主要记了一下理论 为什么要讲不同的网络结构 不同的网络结构解决的问题不同不同的网络结构使用的技巧不同…

【人工智能原理自学】卷积神经网络:打破图像识别的瓶颈

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解卷积神经网络:打破图像识别的瓶颈,一起卷起来叭! 目录一、手写体识别二、“炼丹”一、手写体识别 在机器学习、神经网络领域&#…