? 想要了解更多不掺水的原创,请戳上方蓝色字体:政采云前端团队 关注我们吧~
本文首发于政采云前端团队博客:图文并茂,为你揭开“单点登录“的神秘面纱 https://www.zoo.team/article/sso
单点登录( Single Sign On ,简称 SSO),是目前比较流行的企业业务整合的解决方案之一,用于多个应用系统间,用户只需要登录一次就可以访问所有相互信任的应用系统。
Set-Cookie
的首部字段信息或者客户端 document.cookie
来设置,并随着每次请求发送到服务器。子域名可以获取父级域名 Cookie。在介绍单点登录之前,我们先来了解一下在浏览器中,访问一个需要登录的应用时主要发生的一系列流程,如下图所示:
以下为连环画形式,期望能让读者更好的理解:
依赖于登录后设置的 Cookie,之后每次访问时都会携带该 Cookie,从而让后台服务能识别当前登录用户。
题外话
后台是如何通过 SessionID 知道是哪个用户呢?
当访问同域名下的页面时,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 的。
如果只是期望异步请求时获取当前用户的登录态,可以通过发送跨域请求到已经登录过的域名,并配置属性:
xhrFields: {
withCredentials: true
}
这样可在请求时携带目标域名的 Cookie,目标域名的服务即可识别当前用户。
但是,这要求目标域名的接口支持 CORS 访问(出于安全考虑,CORS 开启 withCredentials 时,浏览器不支持使用通配符*
,需明确设置可跨域访问的域名名单)。
题外话:
如果只是为了规避浏览器的限制,实现与通配*
同样的效果,到达所有域名都可以访问的目的,可根据访问的 Referrer
解析请求来源域名,作为可访问名单。但是出于安全考虑,不推荐使用,请设置明确的可访问域名。
CAS(Central Authentication Service),即中央认证服务,是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。
既然不能跨域获取,那 CAS 如何做到共享呢?它通过跳转中间域名的方式来实现登录。
页面访问流程如下图:
以下为连环画形式,期望能让读者更好的理解:
其中需要关注以下 2 点:
其他相关的内容,也可以进行简单了解,如:单点登录退出 SLO(https://apereo.github.io/cas/5.2.x/installation/Logout-Single-Signout.html)、OAuth2(http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)。
浏览器的同源策略(https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy)
CAS 协议(https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html)
如果你觉得这篇内容对你挺有启发,我想邀请你帮我两件小事
1.点个「在看」,让更多人也能看到这篇内容(喜欢不点在看的,都是耍流氓)
2.关注公众号「政采云前端团队」,持续为你推送精选好文
政采云前端团队(ZooTeam),一个年轻富有激情和创造力的前端团队,隶属于政采云产品研发部,Base 在风景如画的杭州。团队现有 50 余个前端小伙伴,平均年龄 27 岁,近 3 成是全栈工程师,妥妥的青年风暴团。成员构成既有来自于阿里、网易的“老”兵,也有浙大、中科大、杭电等校的应届新人。团队在日常的业务对接之外,还在物料体系、工程平台、搭建平台、性能体验、云端应用、数据分析及可视化等方向进行技术探索和实战,推动并落地了一系列的内部技术产品,持续探索前端技术体系的新边界。
如果你想改变一直被事折腾,希望开始能折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变既定的节奏,将会是“5 年工作时间 3 年工作经验”;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊… 如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的前端团队的成长历程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 ZooTeam@cai-inc.com