什么是单点登录(SSO)前端用 iframe 实现单点登录 超详细说明!!

目录

什么是单点登录?

使用 iframe 实现单点登录


什么是单点登录?

单点登录的英文名叫做:Single Sign On(简称SSO)。

单点登录是一种身份验证过程,允许用户通过一次登录验证即可访问多个应用程序或服务。SSO的关键好处是提高了效率,减少了用户记住多个密码的负担,同时也简化了用户管理。

比如阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。

使用 iframe 实现单点登录

对于存在不同域名的系统,我们可以借助iframe的src属性解决跨域问题,然后用iframe的dom元素contentWindowpostMessage向iframe内嵌的网页传递数据,再在被内嵌的网页的代码中添加message事件截取消息,然后去保存token。

需要单点登录系统的域名

// 需要单点登录的目标系统
export const SSOUrl = ["http://localhost:8080","http://localhost:3000","http://localhost:7777"];

系统中点击跳转的回调函数 

export const LoginByUsernameHandler = ({ commit }, userInfo) => {
      return new Promise(resolve => {
        // 登录接口
        loginByUsername(userInfo).then(result => {
          var res = result.data;

          const data = res.data;

          SSOUrl.forEach(item => {
            // 创建子域的iframe, 用于传送数据
            const iframe = document.createElement("iframe");

            // 需要单点登录系统的域名
            iframe.src = `${item}/localstorage.html`;

            // 设置 ifream 为不可见
            iframe.style.display = "none";

            // 在节点的最后一个子节点之后插入节点,同时将节点中的字符串替换为等效的 Text 节点。
            document.body.append(iframe);

            // 使用 postMessage() 发送数据到子系统
            setTimeout(function() {
              let info = {
                userInfo: data.UserInfo,
                token: data.Token
              };
              iframe.contentWindow.postMessage(info, item);
            }, 2000);

            // 成功后销毁iframe
            setTimeout(function() {
              iframe.remove();
            }, 4000);
          });
        });
      });
    }

需要实现免登录的系统下的 单点登录文件 

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width,initial-scale=1.0">
	<link rel="icon" href="<%= BASE_URL %>favicon.ico">
	<title></title>
  
</head>
<body>
<noscript>
	<strong>抱歉,javascript被禁用,请开启后重试。</strong>
</noscript>
<div >1111111</div>
</body>

  <script>
    // 在这个iframe所加载的HTML中绑定一个事件监听器,当事件被触发时,把接收到的token数据写入localStorage
  window.addEventListener('message', function (event) {
    console.log("子系统接受消息",event)
    let tokenCache = { content:event.data.token,dataType : 'string' , datetime : new Date().getTime()}
      localStorage.setItem('avue-token', JSON.stringify(tokenCache))

      let userCache = { content:event.data.userInfo,dataType : 'string' , datetime : new Date().getTime()}
      localStorage.setItem('avue-userInfo', JSON.stringify(userCache))
      
      
      // console.log("coke",getCookie("Authorization"))
      // setCookie("Authorization",event.data,60)
  }, false);
  </script>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华清远见作业第四十四天——FreeRTOS(第二天)

总结DMA空闲中断接收数据的使用方法 开启DMA接收 在主函数中以DMA空闲中断的方式接收数据的函数&#xff1a;HAL_UARTEx_ReceiveToIdle_DMA 然后调用空闲中断回调函数 切记/每次接收到数据都需要重新开启接收数据的函数。 DMA的作用 DMA是直接内存访问&#xff0c;使用DMA可…

Threejs着色器(GPU)编程——感温管网

管网,作为支撑现代城市运转的重要基础设施,是隐藏在地面之下的庞大工程网络。这些管网如同城市的血脉,负责输送各种必要的资源,如水源、热力、燃气等,同时排除废水和其他废弃物。然而,由于其位于地下,人们往往难以直接感知其存在和运行状态。为了保障这些地下管网的安全…

CLion 配置 Qt 开发环境

文章目录 CLion 配置 Qt 开发环境环境说明基本配置1. 创建Qt项目2. 设置CLion工具链3. 配置外部工具 一些问题的补充 CLion 配置 Qt 开发环境 环境说明 操作系统&#xff1a;Windows 10 CLion版本&#xff1a;2023.3.4 CMake版本&#xff1a;3.27.7 Qt6版本&#xff1a;6.6…

【SpringBoot】-- 实现本地文件/图片上传到服务器生成url地址

在java项目中你可能会有以下需求&#xff1a;用户上传本地图片&#xff0c;然后展示在网页上。本篇文章将使用阿里云oss实现上传图片到oss&#xff0c;oss生成url。 一、准备工作 首先进入阿里云&#xff0c;按如下操作 进入创建页面&#xff0c;修改读写权限为公共读 然后进…

unity学习(50)——服务器三次注册限制以及数据库化角色信息5--角色信息数据库化收尾

上一节内容结束后确实可以写入文件了&#xff0c;但还有两个问题&#xff1a; 1.一个是players.txt中&#xff0c;每次重启服务器&#xff0c;当注册新账号创建角色时&#xff0c;players.txt之前内容都会清空。 2.players.txt之前已经注册3次的账号&#xff0c;新注册的角色…

P2241 统计方形(数据加强版) python解法

求n*m网格内矩形的数目 - tenos - 博客园 (cnblogs.com) 法一&#xff08;题解推规律暴力枚举得到&#xff09;&#xff1a; n,mmap(int,input().split()) sqr,rec0,0 #正方形和长方形个数 #以长宽做循环&#xff0c;每次求n*m大小的矩形的个数 #题解是从0开始的&#xff0c;我…

软件测试相关概念和bug的相关总结

文章目录 什么是测试什么是需求测试用例(CASE)什么是BUG软件的生命周期开发模型瀑布模型螺旋模型增量模型和迭代模型 敏捷测试模型v模型W模型(双V模型) 软件测试的生命周期如何描述一个bugbug的级别bug的生命周期.产生争执怎么办 什么是测试 测试是测试人员用来检验软件的实际运…

分时段计费点电能表 削峰填谷

分时电价机制分为峰谷电价机制、季节性电价机制等。峰谷电价机制是将一天划分为高峰、平段、低谷&#xff0c;季节性电价机制是将峰平谷时段划分进一步按夏季、非夏季等作差别化安排&#xff0c;对各时段分别制定不同的电价水平。 国家发展改革委有关负责人指出&#xff0c;此…

SSD LDPC软错误探测方案解读

上一篇文档中,基于SSD LDPC(Low-Density Parity-Check Codes)原理背景和纠错能力作了简单的介绍。 扩展阅读: 关于SSD LDPC纠错能力的基础探究 浅析LDPC软解码对SSD延迟的影响 本篇结合SMI发布的研究成果,通过SSD控制内部LDPC更底层的架构,来解读如何增强软错误探测能力…

慢SQL调优-索引详解面试题

Mysql 慢SQL调优-索引详解面试题 前言一、慢查询日志设置二、explain查看执行计划三、索引失效四、索引操作五、profile 分析执行耗时 前言 最新的 Java 面试题&#xff0c;技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列…

博图V17新建项目测试软件实现S7-1200PLC软件常开常闭仿真

文章目录 [TOC](文章目录) 博图V17新建项目 前言一、添加设备二、设置安全级别三、编写程序四、程序仿真五、程序下载六、运行效果总结 博图V17新建项目 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本…

安全测试:抵御现代网络威胁的盾牌!

什么是安全测试 安全测试是软件测试的一个重要方面&#xff0c;专注于识别和解决软件应用程序中的安全漏洞。它旨在确保软件免受恶意攻击&#xff0c;未经授权的访问和数据泄露。 安全测试的目的 安全测试涉及核实软件是否符合安全标准&#xff0c;评估安全功能和机制&#…

20240307-2-前端开发校招面试问题整理HTML

前端开发校招面试问题整理【2】——HTML 1、HTML 元素&#xff08;element&#xff09; Q&#xff1a;简单介绍下常用的 HTML 元素&#xff1f; 块状标签&#xff1a;元素独占一行&#xff0c;可指定宽、高。 常用的块状元素有&#xff1a; <div>、<p>、<h1&…

vue el-avatar 使用require提示无法找到图片

报错信息 错误代码 问题分析 vue初始化DOM树时没有挂载数据,导致无法找到模块 解决方案

【计算机网络笔记】1.概论

【计算机网络笔记】1.概论 前言: 计算机网络概论学习过程中,我感觉它就是在问一个问题: 计算机之间如何实现高效通信? 计算机网络的名词解释 重要基本特点 1.连通性 2.资源共享计算机网络的组成 由若干节点node和连接这些节点的链路link组成。节点可以是计算机、集线器、交换…

day2:keil5基础2

思维导图 使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。2.总结DMA空闲中断接收数据的使用方法 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_value HAL_ADC_GetValue(&hadc);TIM3->CCR3 adc_value * 999 / 4095;printf(&q…

线性代数笔记13--正交向量和正交子空间

0. 四个子空间 1. 正交向量 两向量点乘为0&#xff0c;向量正交。 A ⊤ B 0 A^{\top}B0 A⊤B0 勾股定理 ∣ ∣ x ∣ ∣ 2 ∣ ∣ y 2 ∣ ∣ ∣ ∣ x y ∣ ∣ 2 ||x||^2||y^2||||xy||^2 ∣∣x∣∣2∣∣y2∣∣∣∣xy∣∣2 验证正交条件 ∣ ∣ x ∣ ∣ 2 x ⊤ x x x ⊤ ∣…

【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 常用HTML标签(1)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 HTML中的双…

在Exchange中启用/禁用搜索索引

默认情况下&#xff0c;所有的新邮箱数据都是启用Exchange搜索&#xff0c;仅当多个邮箱迁移到该Exchange Server时&#xff0c;才禁用搜索索引。 获取数据库的Exchange搜索索引 使用Get-MailboxDatabase 来获取数据库的搜索索引 Get-MailboxDatabase | Select-Object Name,…

比较好用的idea插件分享

1. 使用内置 HTTP Client 测试接口 不需要再使用 Postman 等外置接口测试工具了&#xff0c;IDEA 内置了 HTTP Client&#xff0c;通过编写请求脚本来进行调用&#xff0c;非常灵活。 在顶部菜单的 Tools > HTTP Client 中打开&#xff1a; 编写脚本进行 HTTP 接口测试&…