概念

单点登录( Single Sign On ,简称 SSO),是目前比较流行的企业业务整合的解决方案之一,用于多个应用系统间,用户只需要登录一次就可以访问所有相互信任的应用系统。

前置介绍

同源策略 限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,要求协议,端口和主机都相同。

HTTP 用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是无状态协议,所以服务器单从网络连接上无从知道客户身份。 那要如何才能识别客户端呢?给每个客户端颁发一个通行证,每次访问时都要求带上通行证,这样服务器就可以根据通行证识别客户了。最常见的方案就是 Cookie。

Cookie 是客户端保存用户信息的一种机制,保存在客户机硬盘上。可以由服务器响应报文Set-Cookie的首部字段信息或者客户端 document.cookie来设置,并随着每次请求发送到服务器。子域名可以获取父级域名 Cookie。

Session 其实是一个抽象概念,用于跟踪会话,识别多次 HTTP 请求来自同一个客户端。Cookie 只是通用性较好的一种实现方案,通常是设置一个名为 SessionID(名称可自定义,便于描述,本文均使用此名称)的 Cookie,每次请求时携带该 Cookie,后台服务即可依赖此 SessionID 值识别客户端。

单系统登录

在介绍单点登录之前,我们先来了解一下在浏览器中,访问一个需要登录的应用时主要发生的一系列流程,如下图所示:

登录流程

以下为连环画形式,期望能让读者更好的理解:

依赖于登录后设置的 Cookie,之后每次访问时都会携带该 Cookie,从而让后台服务能识别当前登录用户。

题外话

后台是如何通过 SessionID 知道是哪个用户呢?

数据库存储关联:将 SessionID 与数据信息关联,存储在 Redis、mysql 等数据库中;

数据加密直接存储:比如 JWT 方式,用户数据直接从 SessionID 值解密出来(此方式时 Cookie 名称以 Token 居多)。

多系统登录问题

同域名

当访问同域名下的页面时,Cookie 和单系统登录时一样,会正常携带,后台服务即可直接获取到对应的 SessionID 值,后台为单服务还是多服务无差别。

不同子域名

子域名间 Cookie 是不共享的,但各子域名均可获取到父级域名的 Cookie,即app.demo.com与news.demo.com均可以获取 demo.com域名下的 Cookie。所以可以通过将 Cookie 设置在父级域名上,可以达到子域名共享的效果,即当用户在 app.demo.com 域名下登录时,在demo.com域名下设置名为 SessionID 的 Cookie,当用户之后访问news.demo.com时,后台服务也可以获取到该 SessionID,从而识别用户。

完全不同域名

默认情况下,不同域名是无法直接共享 Cookie 的。

前端跨域带 Cookie

如果只是期望异步请求时获取当前用户的登录态,可以通过发送跨域请求到已经登录过的域名,并配置属性:

xhrFields: {

withCredentials: true

}

这样可在请求时携带目标域名的 Cookie,目标域名的服务即可识别当前用户。

但是,这要求目标域名的接口支持 CORS 访问(出于安全考虑,CORS 开启 withCredentials 时,浏览器不支持使用通配符*,需明确设置可跨域访问的域名名单)。

题外话:

如果只是为了规避浏览器的限制,实现与通配*同样的效果,到达所有域名都可以访问的目的,可根据访问的 Referrer 解析请求来源域名,作为可访问名单。但是出于安全考虑,不推荐使用,请设置明确的可访问域名。

CAS

CAS(Central Authentication Service),即中央认证服务,是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。

既然不能跨域获取,那 CAS 如何做到共享呢?它通过跳转中间域名的方式来实现登录。

页面访问流程如下图:

流程图

以下为连环画形式,期望能让读者更好的理解:

其中需要关注以下 2 点:

所有的登录过程都依赖于 CAS 服务,包含用户登录页面、ST 生成、验证;

为了保证 ST 的安全性,一般 ST 都是随机生成的,没有规律性。CAS 规定 ST 只能保留一定的时间,之后 CAS 服务会让它失效,而且,CAS 协议规定 ST 只能使用一次,无论 ST 验证是否成功,CAS 服务都会清除服务端缓存中的该 ST,从而规避同一个 ST 被使用两次或被窃取的风险。

扩展阅读

其他相关的内容,也可以进行简单了解,如:单点登录退出 SLO、OAuth2。

参考文档

招贤纳士

政采云前端团队(ZooTeam),一个年轻富有激情和创造力的前端团队,隶属于政采云产品研发部,Base 在风景如画的杭州。团队现有 50 余个前端小伙伴,平均年龄 27 岁,近 3 成是全栈工程师,妥妥的青年风暴团。成员构成既有来自于阿里、网易的“老”兵,也有浙大、中科大、杭电等校的应届新人。团队在日常的业务对接之外,还在物料体系、工程平台、搭建平台、性能体验、云端应用、数据分析及可视化等方向进行技术探索和实战,推动并落地了一系列的内部技术产品,持续探索前端技术体系的新边界。

如果你想改变一直被事折腾,希望开始能折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变既定的节奏,将会是“5 年工作时间 3 年工作经验”;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊… 如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的前端团队的成长历程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 ZooTeam@cai-inc.com

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[图文并茂,为你揭开“单点登录“的神秘面纱]http://www.zyiz.net/tech/detail-98819.html

html5实现单点登录,图文并茂,为你揭开“单点登录“的神秘面纱相关推荐

  1. 揭开人类语言的神秘面纱:从理解到处理自然语言

    https://www.toutiao.com/a6709740042509615619/ 随着人工智能的进步和技术变得越来越复杂,我们希望现有的概念能够接受这种变化或者改变自己.同样,在自然语言的计 ...

  2. 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器开源项目介绍

    揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...

  3. 揭开Java 泛型类型擦除神秘面纱

    转载自   揭开Java 泛型类型擦除神秘面纱 泛型,一个孤独的守门者. 大家可能会有疑问,我为什么叫做泛型是一个守门者.这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘 ...

  4. @程序员,为你揭开直播技术的神秘面纱!

    作者 | 阿文,责编 | 郭芮 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 随着Web 2.0 的普及以及移动互联网技术的发展,各种视频分享.流媒体直播类型的服务 ...

  5. 小编带你一起揭开DLL木马的神秘面纱(转)

    在这个万"马"奔腾的时代,网络上充斥着各种各样的木马,不过随着杀毒技术的进步和大家防毒意识的提高,传统木马已渐渐失去市场,而DLL木马则"与时俱进"以其强大的生 ...

  6. 【第3期】量化大咖来了!揭开量化对冲的神秘面纱

    阅读原文:http://club.jr.jd.com/quant/topic/1368799 京东金融官方资讯QQ群:456448095 有什么想咨询的都可以来询问我们 我们期待已久的第3位量化大咖来 ...

  7. 揭开均线系统的神秘面纱_揭开依赖注入的神秘面纱,并通过此快速介绍了解它的实际应用...

    揭开均线系统的神秘面纱 by Sankalp Bhatia 通过Sankalp Bhatia 揭开依赖注入的神秘面纱,并通过此快速介绍了解它的实际应用 (Demystify Dependency In ...

  8. 揭开均线系统的神秘面纱_在应用程式审查API中揭开新玩法的神秘面纱

    揭开均线系统的神秘面纱 During the #11WeeksOfAndroid the new Play In-App Review API was announced. This was a lo ...

  9. 服务器里面为什么有的信号好低,为什么同一个地方手机信号却不同?带你揭开手机信号的神秘面纱...

    原标题:为什么同一个地方手机信号却不同?带你揭开手机信号的神秘面纱 信号格数是信号强度的一种直观可视化的表现形式,可以让我们直观的看到信号强度的变化. 相信大家或多或少都遇到过信号弱的情况,那么到底什 ...

  10. android mimi 病毒如何,迷你脑将揭开人类朊病毒的神秘面纱

    原标题:迷你脑将揭开人类朊病毒的神秘面纱 朊病毒病是一种可传染的致命性神经退行性疾病,会感染人类和动物.该疾病可自发发生,也可遗传或由于暴露于受污染的物质而获得.朊病毒病的进展会导致尿蛋白酶抵抗性朊蛋 ...

最新文章

  1. Mac mysql sql_model引起的问题
  2. JavaScript获取iframe中form表单中元素的值
  3. EBS   常见的AD命令
  4. java parameters用法_(四)Parameters,简单参数就用这个
  5. 笔记-项目采购管理-合同类型-成本加激励费用合同
  6. 如果波音公司破产,对美国经济的影响有多大?
  7. (转)Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
  8. 1块钱,能买来财富自由吗?
  9. 亚洲诚信亮相2018天翼智能生态博览会
  10. 研发人员如何提高工作效率
  11. CSS知识全面汇总——速查手册
  12. js的document对象及操作
  13. 隔壁老王都知道的JavaScript+mysql+HTML+CSS的客户管理系统设计和实现【建议收藏,不然看着看着就不见了】
  14. 【聚类算法】MiniBatchKMeans算法
  15. 【Halcon】线阵相机标定
  16. DDL语句--查看表
  17. TensorFlow.js简介
  18. php基础教程推荐,php基础教程-绝对推荐
  19. PG 利用FDW的水平分片
  20. 吐血整理!从外包月薪5K到阿里月薪15K,原理+实战+视频+源码

热门文章

  1. 使用c++SFML制作月圆之夜总集篇
  2. 为什么我要在2018年学习Python?
  3. 我的收藏精品[把它共享出来,相信对大家有点用,毕竟是长时间收藏的] (1)
  4. 光环国际PMP:逗乐~项目经理感言
  5. Zabbix-agent监控客户端
  6. 蓝牙技术|蓝牙智能笔方案简介
  7. 用命令”vue init webpack 项目名称”出错。Command vue init requires a global addon to be installed.
  8. 大数据运营之数据分析
  9. 哈工大2022形式语言与自动机期末试题
  10. python数据分析 知乎_Python数据分析揭秘知乎大V的小秘密