1.单点登录介绍

    单点登录 SSO 全称 Singn Sign On 。SSO 是指在多个应用系统中,用户只需要登录一次用户系统,就可以访问其他互相信任的应用系统。例如:在网易官网登录账户,那么再进入网易邮箱等其他业务的时候会自动登录。另外还有一个好处就是在一定时间内可以不用重复登录账户。

  2.域名与跨域

    域名:网络中的一个门牌号。如:www.baidu.com 就是一个域名。

    域名分析:

    

    跨域:不同域名之间的通信。

    跨域分析:

      

    同源策略:在同一域名下,文件是可以互相访问的。在跨域情况下,由于 JavaScript 的保护机制,会规定一个同源策略。同源策略就是限制一个源中加载文本或脚本与来自其他源中的资源的交互方式。同源:域名,协议,端口相同。在非同源情况下,在请求数据时会报错。

    读写操作:

        同域:可以进行任何的读写操作。
        跨域:1、通常允许写操作,例:表单提交、重定向
                   2、外链接资源
                        a、css: <link ...>
                        b、js:    <script ...> //错误信息,只会在同源脚本中打印出来
                        c、img: <image ..>
                        d、html5视频、音频 : <vedio> <audio>
                        e、<object> <embed> <applet>
                        f、@font-face //不同浏览器支持不同,有的支持跨域字体,有的仅支持同源字体
                        g、<frame> <iframe>  站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互。
                   3、通常不允许读操作

    解决跨域通信的方法:

      1. html5 possagemessage     2. jsonp       3.window.name

      4.window.name         5.location.hash   6.cookie

  3.单点登录实现一(二级域名情况)

    二级域名单点登录情况:

      例如: 需要在 bbb.a.com 和 ccc.a.com 实现单点登录

    解决方法:

      对于二级域名的单点登录,可以通过共享 cookie 来实现。当在 bbb.a.com 页面登录成功后,将一个可以验证已登陆的信息添加到 Cookie 当中。当然不能把密码账号添加到上面,不安全,不过也可以将密码与帐号先进行加密。需要注意设置 cookie 属性的 domain 为顶级域名,即 a.com 。对 cookie 设置不熟悉的可以使用 js-cookie 库来设置 cookie 。设置 cookie 后,在 ccc.a.com 中就可以检测是否登录过并获取 cookie 中先前设置好的属性来进行操作,进行发送请求验证等实现登录功能,直接完成 ccc.a.com 的登录。

    操作流程:

      1.用户在 bbb.a.com 登录。

      2.将需要的身份验证信息存储到 cookie 中 (cookie 的 domain 属性设置顶级域名)。

      3.用户进入 ccc.a.com 页面。

      4.获取存储在 cookie 中的数据。:

      5.ccc.a.com 将数据发送到后台服务器验证。

      6.ccc.a.com 自动登录成功。

  4.单点登录实现二(主域名)

    主域名单点登录情况:

      例如:需要再 www.aaa.com 和 www.bbb.com 实现单点登录

      这种情况下不能共享 cookie 。这时需要利用 html5 中的 postMessage() 方法进行跨域传信息。

    postMessage 简单使用介绍:

      语法: otherWindow.postMessage(message, targetOrigin, [ transfer ])

      参数: otherWindow: 需要传递参数的另一个窗口。

          message: 要发送到另一个窗口的数据。

          targetOrigin: 要发送数据的目标 url 。使用 * 代表任意目标。最好写完整协议,主机名,域名,端口。安全考虑。

          transfer: 可选。是Transferable使用消息传送的一系列对象。不常用。

      使用:例:父窗口(http://www.aaa.com)嵌套 iframe 子窗口(http://www.bbb.com)。

           父窗口: window.frames[0].postMessage(message, "http://www.bbb.com");

         子窗口: window.addEventListener("message", function(event){ if(event.origin !== "http://www.aaa.com") return;   XXXX其他代码 }, false);

         接受到 event 的参数: event.data: 从另一个端口传递来的数据。

                    event.origin: 发送信息的来源。一般需要判断来源。安全考虑。

                    event.source: 引用发送信息的对象。可以使用 event.source.postMessage() 向发送信息来的网站传递信息。

    解决方法:使用一个中转网站用来转接数据。如使用 www.collect.com 来中转数据。将中转网站 www.collect.com 使用 iframe 嵌套进需要实现单点登录的网站(这里的嵌套没必要展示就设为 display: none)。这里需要实现的网站为 www.aaa.com 和 www.bbb.com 。当在 www.aaa.com 中登录帐号,将需要的验证信息存进 cookie 中,同时也将这些信息使用 postMessage 传递给子窗口即 www.collect.com 。www.collect.com 网站接受到这些信息后也存进 cookie 中。当在登录 www.bbb.com 时,嵌套的子窗口 www.collect.com 检测 cookie 信息若存在登录信息就使用 postMessage 传递这些 cookie 信息给父窗口 www.bbb.com 。www.bbb.com 收到信息就可以进行发送请求验证等实现登录功能,直接完成 www.bbb.com 的登录,同时也需要将这些信息存进 cookie 以给使用。

    操作流程:  

      1.将 www.collect.com 嵌套进 www.aaa.com 和 www.bbb.com 中。   

      1.用户在 www.aaa.com 登录。

      2.将需要的身份验证信息存储到 cookie 中。同时使用 postMessage 传给 www.collect.com。

      3. www.collect.com 收到信息储存到 cookie 中,需要时调用。

      3.用户进入 www.bbb.com 页面。

      4.www.collect.com 获取存储在 cookie 中的数据,使用 postMessage 传给 www.bbb.com。

      5.www.bbb.com 将数据发送到后台服务器验证。并将数据存进 cookie 。

      6.www.bbb.com 自动登录成功。

  参考文章:

    1.postMessage:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

    2.跨域:http://www.qdfuns.com/notes/17659/bb090a096034a8074332a5060e9b6a3c.html

    3.cookie:http://blog.csdn.net/fangaoxin/article/details/6952954/

    4.7种跨域方法:http://blog.csdn.net/super_yang_android/article/details/53992114

    5.单点登录:http://blog.csdn.net/fay462298322/article/details/54963716

前端单点登录(SSO)实现方法(二级域名与主域名)的更多相关文章

  1. 初探单点登录 SSO

    单点登录 单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用:同样,用户只需注销其中一个应用,就可以成功注销其他应用. ...

  2. 单点登录SSO原理

    最近接触了一点单点登录的知识,有一点理解,记录一下.有些问题并没有找到完美的解决方法,还需要找点已有框架来看看. 欢迎留言探讨. 1       概念 1.1     概念及理解 有一个网上广为流传的 ...

  3. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

  4. 单点登录SSO:图示和讲解

    目录 概述 示例运行效果动画 跨域Web SSO时序图 代码截图 几个基本概念 涉及的站点和页面 重点理解:单点登录的核心步骤 敢说最准确的单点登录图示,因为: 我严格对照所画时序图的每个步骤,开发了 ...

  5. 单点登录(一)-----理论-----单点登录SSO的介绍和CAS+选型

    什么是单点登录(SSO) 单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录. 单点登录(Single Sign On),简称为 ...

  6. 聊聊单点登录(SSO)中的CAS认证

    SSO介绍 背景 随着企业的发展,一个大型系统里可能包含 n 多子系统, 用户在操作不同的系统时,需要多次登录,很麻烦,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录. web 系 ...

  7. cas单点登录 SSO 的实现原理

    原文出处: cutesource   欢迎分享原创到伯乐头条 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户 ...

  8. 单点登录 SSO 的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用 ...

  9. 十六、【适合中小企业的.Net轻量级开源框架】EnterpriseFrameWork框架核心类库之单点登录SSO

    回<[开源]EnterpriseFrameWork框架系列文章索引> EFW框架源代码下载:http://pan.baidu.com/s/1qWJjo3U 单点登录(Single Sign ...

随机推荐

  1. css3常用样式

    .box{ //改变轴的方向 flex-direction:column; //两端对齐 justify-content:space-between; //换行 flex-wrap: wrap; // ...

  2. vue+ element 动态换肤

    转至 https://www.cnblogs.com/dengqichang/p/10364455.html 一.搭建好项目的环境. 二.根据ElementUI官网的自定义主题(http://elem ...

  3. ChinaCock打印控件介绍-TCCFujitsuPrinter实现蓝牙针式打印

    项目中遇到,要蓝牙针式打印机,用手机打印表单.感谢专家,对厂家提供的SDK进行了封装,实现利用Delphi开发出这一功能. 现在来看看,如何利用这一控件实现打印过程: procedure startS ...

  4. Java学习笔记【六、正则表达式】

    参考:http://www.runoob.com/java/java-regular-expressions.html 概述 java.util.regex包,主要包含三个类: Pattern:正则表 ...

  5. 1-win10配置 Vagrant 环境

    1-win10配置 Vagrant 环境 2019.9.13 Vagrant 概述 vagrant是一个操作虚拟机的工具.是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 通过命令和配置文件来 ...

  6. Linux下kafka集群搭建

    环境准备 zookeeper集群环境 kafka是依赖于zookeeper注册中心的一款分布式消息对列,所以需要有zookeeper单机或者集群环境. 三台服务器: 172.16.18.198 k8s ...

  7. centos6下yum安装mariadb数据库的解决方法

    在centos6下Yum安装mariadb数据库时老是提示无法正常安装,看错误日志才发现,是没有mariadb release源文件在/etc/yum.repos.d/中,为此,我特意在新建文件: # ...

  8. 自然语言处理(三) 预训练模型:XLNet 和他的先辈们

    预训练模型 在CV中,预训练模型如ImagNet取得很大的成功,而在NLP中之前一直没有一个可以承担此角色的模型,目前,预训练模型如雨后春笋,是当今NLP领域最热的研究领域之一. 预训练模型属于迁移学 ...

  9. Easy Populate批量管理下载产品数据为空的解决办法

    把原来的先删除:http://aaaaacom/admin/easypopulate.php?langer=remove

  10. CSS——简写属性(在padding和margin这样的简写属性中,值赋值的顺序是top、right、bottom、left)

    /* 在padding和margin这样的简写属性中,值赋值的顺序是top.right.bottom.left. 它们还有其他简写方式,例如给padding两个值,则第一个值表示top/bottom, ...