写点什么

图文并茂,为你揭开“单点登录“的神秘面纱

  • 2021-03-12
  • 本文字数:1806 字

    阅读完需:约 6 分钟

图文并茂,为你揭开“单点登录“的神秘面纱

概念


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


前置介绍


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

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

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

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


单系统登录


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



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








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


题外话

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

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

  2. 数据加密直接存储:比如 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 点:


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

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


扩展阅读


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


参考文档


浏览器的同源策略

CAS 协议



头图:Unsplash

作者:余诺

原文:https://mp.weixin.qq.com/s/_AJf3B-HezUgtSh8gprKLw

原文:图文并茂,为你揭开“单点登录“的神秘面纱

来源:政采云前端团队 - 微信公众号 [ID:Zoo-Team]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2021-03-12 23:064667

评论

发布
暂无评论
发现更多内容

80+产品正通过兼容性测试,OpenHarmony生态落地已初具规模

科技汇

设计千万级学生管理系统的考试试卷存储方案

锎心😌😌😌

it资产管理系统解决方案

低代码小观

资产管理 企业管理系统 CRM系统 IT治理 资产安全

有更新!鸿蒙智联生态产品《接入智慧生活App开发指导》(官方版)

HarmonyOS开发者

HarmonyOS 鸿蒙智联

开发改了接口,经常忘通知测试,有什么好的解决方案吗?

Liam

测试 Postman 自动化测试 测试工具 测试自动化

OpenHarmony技术日圆满举行 | 3.1 Release版本重磅发布,生态落地初具规模

OpenHarmony开发者

OpenHarmony 技术日

基于Sharding-JDBC的订单分库⽅案

领创集团Advance Intelligence Group

带你认识2种基于深度学习的场景文字检索算法

华为云开发者联盟

深度学习 计算机视觉 文本检测 场景文本检索 文字检索

免费IT自动化运维平台- ETL调度批量管理工具 TASKCTL 8.0 作业设计功能使用

TASKCTL

数据仓库 数据治理 运维自动化 ETL任务 TASKCTL

网站的FAQ页面应该怎么写?

小炮

FAQ

一看即会:Serverless 应用开发的 7 个实战小技巧(文末附好礼)

阿里巴巴云原生

阿里云 Serverless 架构 开发者 云原生

以南大通用为例,讲一讲如何完成与龙蜥操作系统的兼容验证

OpenAnolis小助手

操作系统 龙蜥社区 南大通用 兼容验证

netty系列之:使用Jboss Marshalling来序列化java对象

程序那些事

Java Netty 程序那些事 4月月更

企业如何应对知识管理中的文档管理

小炮

知识管理

KPI与360度考核结合的应用落地方案

明道云

3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力

Apache DolphinScheduler

Bigdata DolphinScheduler workflow Open Source apache 社区

智能手表的下半场,机遇与挑战并存

Speedoooo

物联网 小程序容器 智能手表 智能穿戴

风险与机遇并存,数据分析厂商如何突围?

ToB行业头条

区块链赋能不动产—易居EBaaS在不动产领域应用

BSN研习社

区块链

列举GaussDB(DWS)常见的查询时索引失效场景

华为云开发者联盟

索引 GaussDB(DWS) 隐式类型转化 GIN索引 analyze

必示科技入围未来银行科技服务商Top100榜单

BizSeer必示科技

在亚马逊云科技上搭建静态无服务器 Wordpress,每天仅需 0.01 美元

亚马逊云科技 (Amazon Web Services)

Serverless CDN WordPress

一个平面设计师的异想世界

万事ONES

研发管理 设计师 ONES workbalance

如何成为一名亚马逊云科技 Community Builder

亚马逊云科技 (Amazon Web Services)

Cloud 亚马逊云科技 career

智慧运维平台之全息监控

鲸品堂

运维 通信 运营商

Sidecar 模式的机制与应用

全象云低代码

Kubernetes 容器 低代码 后端技术 Sidecar

离AI无处不在还有多远?从一个英特尔开源平台开始实现

科技新消息

macOS 安装 Nebula Graph 看这篇就够了

NebulaGraph

macos 图数据库 安装部署

Docker 镜像知多少?

Daocloud 道客

云原生 Docker 镜像

OpenHarmony技术日成功举办,全球下载次数高达6300万

科技汇

阿里云人工智能创新发布-工业五金图片搜索

视觉智能

拍照购物 以图搜图 图像搜索 拍立淘

图文并茂,为你揭开“单点登录“的神秘面纱_文化 & 方法_政采云前端团队_InfoQ精选文章