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

单点登录深入详解之设计方案总结

基于cookie的单点登录解决方案

概述

用户登录之后 , 将认证信息存储至 Cookie ,当再次访问本服务或者访问其他应用服务时,直接从
Cookie 中传递认证信息,进行鉴权处理。

问题

1. 如何保障Cookie内用户认证信息的安全性?

  • 第一, Cookie内不能存放用户名和密码等敏感信息, 可以生成一串Token进行替代;
  • 第二, 通过加密方式存储Cookie信息,并且采用https加密方式传输,设定Cookie有效期,在 服务端设定Token的有效期,避免攻击者伪造用户身份。

2. 如何解决跨域问题?

在实际应用中, 经常会存在各种服务需要鉴权处理, 但受浏览器同源策略限制,无法去正常
操作 Cookie 数据 , 解决方式有两种 :
  • 第一种,采用iframe方式解决跨域问题, 实现Cookie共享,但要注意,父窗口获取子窗口在跨域下可以正常获取,子窗口后去父窗口仍会存在跨域问题,这点在实现的时候要注意。
  • 第二种,采用JSONP方式实现跨域传输,这需要在服务端设置允许跨域请求, response.setHeader("Access-Control-Allow-Origin", "*"); 设置允许任何域名跨域访问,服务端返回数据时,再设置callback,才能完成跨域请求。

设计方案架构图

这里以淘宝SSO的架构为例

基于分布式Session的单点登录解决方案

概述

大型应用服务无论是整体拆分,还是集群部署,都会涉及到统一会话问题,
  • 如何保障各服务节点都能够统一有效鉴权?
  • 某个服务节点宕机,重启后如何恢复登录状态?
  • Cookie禁用的情况下如何实现SSO?
由此产生了分布式 Session 设计方案。 分布式 Session 方案,实质是通过自定义的Session机制来处理用户的登录鉴权信息,实现单点登录。

实现流程

常用技术框架

Spring Session :
        它是目前主流的 Session 管理解决方案, Spring Session 并非特定应用于HTTP, 它是一种广义的分布式统一Session ,支持 WebSocket WebSession 等,并且可以基于Redis、 MongoDB 等多种高性能缓存来实现。
XXL-SSO :
        它是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有” 轻量级、分布式、跨域、 Cookie+Token 均支持、 Web+APP 均支持 等特性。现已开放源代码,开箱即用。架构图:

基于客户端令牌Token的单点登录解决方案

概述

根据客户端身份信息由认证服务生成签名令牌,令牌中会包含基本的用户信息,客户端在请求资源
服务时会附带令牌,资源服务根据加密协议在本地进行验证,或者发送给认证服务端进行校验。它可以解决分布式会话的安全性问题,比如会话劫持,同时不需要集中统一维护session ,能够做到无状态化处理。OAuth2 JWT 都是基于令牌 Token 实现的认证方案。

适用场景

JWT (JSON Web Token) 是一个开放安全的行业标准 , 用于多个系统之间传递安全可靠的信息。它由三部分组成,头部(Header)、载荷 (playload)与签名(Signature)
Token 实质是一个无意义的UUID,需要服务端做记录与认证。
但JWT 则赋予了用户的身份信息,可以采用自定义算法进行加密与解密,直接实现信息的传输交换。
那具体适用于哪些场景?
  • 可以适用于微服务应用,无论是内部服务节点的认证与授权,或是令牌与API网关结合的认证。
  • 可以适用于开放式的API接口访问,比如前后分离API对接,第三方API接口对接等。

实现流程

相关文章:

单点登录深入详解之设计方案总结

基于cookie的单点登录解决方案 概述 用户登录之后 , 将认证信息存储至 Cookie ,当再次访问本服务或者访问其他应用服务时,直接从 Cookie 中传递认证信息,进行鉴权处理。 问题 1. 如何保障Cookie内用户认证信息的安全性? 第一, Cookie…...

Loadsh源码分析-forEach,eachRight,map,flatMap,flatMapDeep,flatMapDepth

处理数组array的函数已经学习完,接下来是collection相关的函数, collection指的是一组用于处理集合(如数组或对象)的工具函数。 lodash源码研读之forEach,forEachRight,map,flatMap,flatMapDeep,flatMapDepth 一、源码地址 GitH…...

检测到“runtimelibrary”的不匹配项: 值“mtd_staticdebug”不匹配值“mdd_dynamic”

1. 解释“runtimelibrary”不匹配错误的含义 在Visual Studio中,LNK2038错误表示链接器检测到项目与其依赖的库之间存在“Runtime Library”(运行时库)的不匹配。具体来说,这意味着编译项目时使用的运行时库类型与编译依赖库时使…...

go clean -modcache命令清理缓存

go clean -modcache命令用于清理Go模块的本地缓存。Go模块缓存位于$GOPATH/pkg/mod/cache目录下,存储了所有下载和使用的模块版本。当执行go clean -modcache时,这个命令会删除该目录下的所有内容,迫使Go在下次构建时重新下载所有依赖的模块。…...

C#结构体排序(数组)

结构体排序(数组) 1 示例1.1 以PointF为例展示效果1.2 运行结果展示 2实际运用2.1 创建结构体2.2 调用示例2.3 运行结果展示 1 示例 1.1 以PointF为例展示效果 private void button1_Click(object sender, EventArgs e) {Random random new Random();…...

基于边缘智能网关的机房安全监测应用

随着我国工业互联网的扎实推进,越来越多地区积极建设信息基础设施,以充沛算力支撑产业物联网的可持续发展,数据机房就是其中的典型代表。而且随着机房规模的扩大,对于机房的安全管理难题挑战也日益增加。 面向数据机房安全监测与管…...

【Jenkins】自动化部署 maven 项目笔记

文章目录 前言1. Jenkins 新增 Maven 项目2. Jenkins 配置 Github 信息3. Jenkins 清理 Workspace4. Jenkins 配置 后置Shell脚本后记 前言 目标:自动化部署自己的github项目 过程:jenkins 配置、 shell 脚本积累 相关连接 Jenkins 官方 docker 指导d…...

LeetCode 3243. Shortest Distance After Road Addition Queries I

🔗 https://leetcode.com/problems/shortest-distance-after-road-addition-queries-i 题目 有 n 个城市,编号 0 ~ n-1,从城市 i 到 i1 有一条路给若干高速路,表明从城市 u 到 v 有一条新增的路,v - u > 1返回每新…...

ML 系列:第 31 节— 机器学习中的协方差和相关性

文章目录 一、说明二、协方差和相关性2.1 协方差的概念2.1 相关 三、有关关联的高级主题 (有关详细信息)3.1 相关性和独立性3.2 零相关性和依赖性示例 四、相关性和因果关系五、结论 一、说明 协方差量化了两个随机变量协同变化的程度。当一个变量的较高…...

【鸿蒙】鸿蒙开发过程中this指向问题

文章目录 什么是 this?常见 this 指向问题案例分析:HarmonyOS 组件中的 this 指向问题问题描述问题分析原因 解决方案:绑定 this 的正确方法方法一:使用箭头函数方法二:手动绑定 this 完整代码示例使用箭头函数使用 bi…...

d3-contour 生成等高线图

D3.js 是一个强大的 JavaScript 库,用于创建动态、交互式数据可视化。d3-contour 是 D3.js 的一个扩展模块,用于生成等高线图(contour plots)。 属性和方法 属性 x: 一个函数,用于从数据点中提取 x 坐标。y: 一个函…...

Ubuntu20.04离线安装全教程(包括DellR940重置Raid 5、安装Ubuntu、设置root、安装nvidia英伟达显卡驱动及设置防火墙白名单)

本文记录重装Ubuntu20.04的所有记录,从服务器磁盘阵列重新排列、Ubuntu 20.04系统安装、配置root权限、安装Nvidia显卡驱动以及设置防火墙白名单的全部操作。 每一部分参考的博客的出处会放置于段落末尾,表示感谢! 一、重置服务器磁盘阵列&…...

Spring Boot 3 集成 Spring Security(2)授权

文章目录 授权配置 SecurityFilterChain基于注解的授权控制自定义权限决策 在《Spring Boot 3 集成 Spring Security(1)》中,我们简单实现了 Spring Security 的认证功能,通过实现用户身份验证来确保系统的安全性。Spring Securit…...

【开篇】.NET开源 ORM 框架 SqlSugar 系列

01. 前言 ☘️ 1.1 什么是ORM? 对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对…...

参加面试被问到的面试题

1.在程序中如何开启事务? 在Java中,使用JDBC(Java Database Connectivity)与数据库交互时,你可以使用Connection对象的setAutoCommit方法来控制事务。默认情况下,autoCommit是开启的,这意味着每…...

第29天:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作

时间轴: 演示案例: JS 原生开发-DOM 树-用户交互 DOM:文档操作对象 浏览器提供的一套专门用来操作网页代码内容的功能,实现自主或用户交互动作反馈 安全问题:本身的前端代码通过 DOM 技术实现代码的更新修改&#xff…...

react 的路由功能

1. 安装依赖 pnpm add react-router-dom 2. 基本的路由设置(BrowserRouter) 在 main.tsx 入口文件中使用BrowserRouter组件来包裹整个应用。它会监听浏览器的 URL 变化。 import { StrictMode } from "react";import { createRoot } from …...

SurfaceFlinger学习之一:概览

SurfaceFlinger 是 Android 系统中负责合成和显示屏幕内容的关键系统服务,它运行在一个专用的进程中 (system/bin/surfaceflinger)。它的主要职责是将不同应用程序的绘制内容(即窗口或表面)组合起来,通过硬件抽象层(HA…...

Qt关于窗口一直调用paintEvent的踩坑实录

首先看以下代码&#xff1a; void ItemBlockWidget::paintEvent(QPaintEvent *ev) {// 先调用父类的 paintEvent 以执行默认绘制行为QWidget::paintEvent(ev);qDebug()<<"ItemBlockWidget重绘";QStyleOption opt;opt.initFrom(this);QPainter p(this);style()…...

C++11: STL之bind

C11: STL之bind 引言可调用对象的绑定绑定普通函数绑定静态函数绑定类成员函数绑定仿函数绑定Lambda 占位符std::placeholders的应用嵌套绑定参数重排序结合 STL 算法占位符传递到嵌套函数混合占位符与默认值复杂占位符组合 std::bind的原理std::bind 的设计思路简化实现示例 B…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中&#xff0c;要设置一个操作在指定延迟后&#xff08;例如3秒&#xff09;执行&#xff0c;可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法&#xff0c;它接受两个参数&#xff1a; 要执行的函数&…...