单点登录( Single Sign On ,简称 SSO),是目前比较流行的企业业务整合的解决方案之一,用于多个应用系统间,用户只需要登录一次就可以访问所有相互信任的应用系统。
创新互联主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务南昌,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
图片来自 Pexels
前置介绍:
单系统登录
在介绍单点登录之前,我们先来了解一下在浏览器中,访问一个需要登录的应用时主要发生的一系列流程,如下图所示:
以下为连环画形式,期望能让读者更好的理解:
依赖于登录后设置的 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 的。
前端跨域带 Cookie
如果只是期望异步请求时获取当前用户的登录态,可以通过发送跨域请求到已经登录过的域名,并配置属性:
- xhrFields: {
- withCredentials: true
- }
这样可在请求时携带目标域名的 Cookie,目标域名的服务即可识别当前用户。
但是,这要求目标域名的接口支持 CORS 访问(出于安全考虑,CORS 开启 withCredentials 时,浏览器不支持使用通配符*,需明确设置可跨域访问的域名名单)。
题外话:如果只是为了规避浏览器的限制,实现与通配*同样的效果,到达所有域名都可以访问的目的,可根据访问的 Referrer 解析请求来源域名,作为可访问名单。但是出于安全考虑,不推荐使用,请设置明确的可访问域名。
CAS
CAS(Central Authentication Service),即中央认证服务,是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。
既然不能跨域获取,那 CAS 如何做到共享呢?它通过跳转中间域名的方式来实现登录。
页面访问流程如下图:
以下为连环画形式,期望能让读者更好的理解:
其中需要关注以下 2 点:
本文名称:连环画解析“单点登录”原理,保证你能看懂!
网址分享:http://www.hantingmc.com/qtweb/news38/519138.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联