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

news2024/10/25 6:33:41

目录

什么是单点登录?

使用 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>

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

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

相关文章

达梦数据库基础操作(二):表空间操作

达梦数据库基础操作(二)&#xff1a;表空间操作 1. 表空间操作 1.1 达梦表空间介绍 表空间的概念&#xff1a; 每个DM 数据库都是由一个或者多个表空间组成&#xff0c;表空间是一个逻辑的存储容器&#xff0c;它位于逻辑结构的顶层&#xff0c;用于存储数据库中的所有数据&am…

ChatMASTER部署教程

项目简介 ChatMASTER&#xff0c;基于AI大模型api实现的自建后端Chat服务&#xff0c;支出同步响应及流式响应&#xff0c;完美呈现打印机效果。支持一键切换ChatGPT(3.5、4.0)模型、文心一言(支持Stable-Diffusion-XL作图)、通义千问、讯飞星火、智谱清言(ChatGLM)等主流模型…

《JAVA与模式》之迭代子模式

系列文章目录 文章目录 系列文章目录前言一、聚集和JAVA聚集二、迭代子模式的结构三、白箱聚集与外禀迭代子四、外禀迭代子的意义五、黑箱聚集与内禀迭代子 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给…

教育界杂志《教育界》杂志社教育界编辑部2024年第2期目录

教育视界 小学语文课内外阅读的有效融合策略 任小惠; 2-4 项目化学习在初中音乐教学中的应用探索 毛海蓉; 5-7 探索之窗《教育界》投稿&#xff1a;cn7kantougao163.com 儿童无边界阅读支撑系统的建构与实施 袁干斌;蒯红良; 8-10 中学教学 基于核心素养培养的高…

【Spring高级】第2讲:容器实现类

目录 BeanFactory实现BeanDefinition后置处理器单例bean创建后置处理器顺序总结 ApplicationContext实现ClassPathXmlApplicationContextFileSystemXmlApplicationContextAnnotationConfigApplicationContextAnnotationConfigServletWebServerApplicationContext BeanFactory实…

Lazada本土店与跨境店区别,附店铺防关联攻略

许多新手商家在初入跨境电商时&#xff0c;对于平台账号类别并不清楚。Lazada是最大的东南亚在线购物平台之一&#xff0c;如果你的跨境目标正指向东南亚&#xff0c;那么Lazada一定是是你的首选平台。那么接下来让小编带大家认识Lazada本土店与跨境店的区别&#xff01; 一、本…

DNS——域名系统

TCP/IP提供了通过IP地址来连接到设备的功能&#xff0c;但对用户来讲&#xff0c;记住某台设备的IP地址是相当困难的&#xff0c;因此专门设计了一种字符串形式的主机命名机制&#xff0c;这些主机名与IP地址相对应。在IP地址与主机名之间需要有一种转换和查询机制&#xff0c;…

基于springboot的某大学外卖系统的实现(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1 后台登录 2管理员界面 3员工信息管理 4客户信息管理 三、库表设计 四、论文 前言 如今&#xff0c;信息化不断的高速发展&#xff0c;社会也跟着不断进步&#xff0c;现今的社会&#xff0c;各种工作都离不开信息化技…

python 截取字符串string.split

目录 作用语法只要第一个值获得第3个值遍历 作用 根据某个符号对数据进行截取 从而获得自己想要的内容 语法 使用’string.split’ 方法 对字符串’123/abc/BPYC’ 以 ‘/’ 进行截取 string "123/abc/BPYC" substring string.split("/") print(subs…

亚马逊运营要使用什么海外代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

【投稿优惠|火热征稿】2024年计算机技术与自动化发展国际会议 (ICCTAD 2024)

2024年计算机技术与自动化发展国际会议 (ICCTAD 2024) 2024 International Conference on Computer Technology and Automation Development (ICCTAD 2024) 【会议简介】 2024年计算机技术与自动化发展国际会议( ICCTAD 2024)将在中国武汉盛大开幕&#xff01;这是一场在自动化…

【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024

AI视野今日CS.Sound 声学论文速览 Tue, 5 Mar 2024 Totally 18 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers SA-SOT: Speaker-Aware Serialized Output Training for Multi-Talker ASR Authors Zhiyun Fan, Linhao Dong, Jun Zhang, Lu Lu, Zejun M…

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】栈和队列

目录 1 -> 栈 1.1 -> 栈的概念及结构 1.2 -> 栈的实现 1.2.1 -> Stack.h 1.2.2 -> Stack.c 1.2.3 -> Test.c 2 -> 队列 2.1 -> 队列的概念及结构 2.2 -> 队列的实现 2.2.1 -> Queue.h 2.2.2 -> Queue.c 1 -> 栈 1.1 -> 栈的…

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python算法题集_N 皇后

Python算法题集_N 皇后 题51&#xff1a;N 皇后1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【规则遍历合理性回溯】2) 改进版一【线状态检测合理性回溯】3) 改进版二【单行矩阵回溯】 4. 最优算法5. 相关资源 本文为Python算法题集之一的代码…

威步安全技术保护铁路免受网络威胁

IoW的TrainCAS列车碰撞预警系统保护铁路列车免受网络攻击。TrainCAS系统内置的高端技术及其被非法利用的风险&#xff0c;让安全和知识产权保护成为公司的首要任务。TrainCAS软件及其轨道图通过CodeMeter AxProtector和Core API工具的结合得到保护&#xff0c;有效防止未授权使…

任务调度新境界:探秘ScheduledExecutorService的异步魔力

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 任务调度新境界&#xff1a;探秘ScheduledExecutorService的异步魔力 前言ScheduledExecutorService的基本概念基本概念&#xff1a;为何它是 Java 中任务调度的首选工具&#xff1a;基本用法&#xf…

Milvus 向量数据库实践 - 1

假定你已经安装了docker、docker-compose 环境 参考的文档如下&#xff1a; Milvus技术探究 - 知乎 MilvusClient() - Pymilvus v2.3.x for Milvus 一文带你入门向量数据库milvus 一、在docker上安装单机模式milvus数据库 1、 进入milvus官网&#xff1a; Install Milvus Stand…

【C++】string类的基础操作

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 1. 基本概述 2. string类对象的常见构造 3. string类对象的容量操作 4. string类对象的访问及遍历操作 5. 迭代器 6.…

noetic ros配置因时机械夹爪的驱动

noetic ros配置因时机械夹爪的驱动文件 配置编译教程解决方案 配置编译教程 1.inspire_robot 包支持因时机器人公司的机械夹爪在ROS平台上的使用&#xff0c;我们在ros noetic环境下进行了测试。 2.为了使程序能够正常运行&#xff0c;需要执行以下环境配置操作&#xff1a;&a…