首页 > 其他分享 >单点登录的原理

单点登录的原理

时间:2023-09-02 09:15:19浏览次数:57  
标签:OpenId 单点 登录 验证 用户 原理 子系统

注:单点登录原理是一个重要知识点,也常被问及,很多童鞋照葫芦画瓢搭建过单点登录,但是被问到原理时可能说不出来,下面简单介绍,抛砖引玉,希望对大家有所帮助。

单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。

我将以我所遇到的应用环境以及在其中所经历的各个阶段与大家分享,若有不足,希望各位不吝赐教。

一、共享Session

共享Session可谓是实现单点登录最直接、最简单的方式。将用户认证信息保存于Session中,即以Session内存储的值为用户凭证,这在单个站点内使用是很正常也很容易实现的,而在用户验证、用户信息管理与业务应用分离的场景下即会遇到单点登录的问题,在应用体系简单,子系统很少的情况下,可以考虑采用Session共享的方法来处理这个问题。

这个架构我使用了基于Redis的Session共享方案。将Session存储于Redis上,然后将整个系统的全局Cookie Domain设置于顶级域名上,这样SessionID就能在各个子系统间共享。

这个方案存在着严重的扩展性问题,首先,ASP.NET的Session存储必须为SessionStateItemCollection对象,而存储的结构是经过序列化后经过加密存储的。

并且当用户访问应用时,他首先做的就是将存储容器里的所有内容全部取出,并且反序列化为SessionStateItemCollection对象。这就决定了他具有以下约束:

  • Session中所涉及的类型必须是子系统中共同拥有的(即程序集、类型都需要一致),这导致Session的使用受到诸多限制;
  • 跨顶级域名的情况完全无法处理;

二、基于OpenId的单点登录

这种单点登录将用户的身份标识信息简化为OpenId存放于客户端,当用户登录某个子系统时,将OpenId传送到服务端,服务端根据OpenId构造用户验证信息,多用于C/S与B/S相结合的系统,流程如下:

图片

由上图可以看到,这套单点登录依赖于OpenId的传递,其验证的基础在于OpenId的存储以及发送。

  1. 当用户第一次登录时,将用户名密码发送给验证服务;
  2. 验证服务将用户标识OpenId返回到客户端;
  3. 客户端进行存储;
  4. 访问子系统时,将OpenId发送到子系统;
  5. 子系统将OpenId转发到验证服务;
  6. 验证服务将用户认证信息返回给子系统;
  7. 子系统构建用户验证信息后将授权后的内容返回给客户端。

这套单点登录验证机制的主要问题在于他基于C/S架构下将用户的OpenId存储于客户端,在子系统之间发送OpenId,而B/S模式下要做到这一点就显得较为困难。为了处理这个问题我们将引出下一种方式,这种方式将解决B/S模式下的OpenId的存储、传递问题。

三、基于Cookie的OpenId存储方案

我们知道,Cookie的作用在于充当一个信息载体在Server端和Browser端进行信息传递,而Cookie一般是以域名为分割的,例如a.xxx.com与b.xxx.com的Cookie是不能互相访问的,但是子域名是可以访问上级域名的Cookie的。即a.xxx.com和b.xxx.com是可以访问xxx.com下的Cookie的,于是就能将顶级域名的Cookie作为OpenId的载体。

图片

验证步骤和上第二个方法非常相似:

  • 在提供验证服务的站点里登录;
  • 将OpenId写入顶级域名Cookie里;
  • 访问子系统(Cookie里带有OpenId)
  • 子系统取出OpenId通过并向验证服务发送OpenId
  • 返回用户认证信息
  • 返回授权后的内容

在以上两种方法中我们都可以看到通过OpenId解耦了Session共享方案中的类型等问题,并且构造用户验证信息将更灵活,子系统间的验证是相互独立的,但是在第三种方案里,我们基于所有子系统都是同一个顶级域名的假设,而在实际生产环境里有多个域名是很正常的事情,那么就不得不考虑跨域问题究竟如何解决。

四、B/S多域名环境下的单点登录处理

在多个顶级域名的情况下,我们将无法让各个子系统的OpenId共享。处理B/S环境下的跨域问题,我们首先就应该想到JSONP的方案。

图片

验证步骤如下:

  • 用户通过登录子系统进行用户登录;
  • 用户登录子系统记录了用户的登录状态、OpenId等信息;
  • 用户使用业务子系统;
  • 若用户未登录业务子系统则将用户跳转至用户登录子系统;
  • 用户子系统通过JSONP接口将用户OpenId传给业务子系统;
  • 业务子系统通过OpenId调用验证服务;
  • 验证服务返回认证信息、业务子系统构造用户登录凭证;(此时用户客户端已经与子业务系统的验证信息已经一一对应)
  • 将用户登录结果返回用户登录子系统,若成功登录则将用户跳转回业务子系统;
  • 将授权后的内容返回客户端;

五、安全问题

经过以上步骤,跨域情况下的单点登录问题已经可以得到解决。而在整个开发过程初期,我们采用用户表中记录一个OpenId字段来保存用户OpenId,而这个机制下很明显存在一些安全性、扩展性问题。这个扩展性问题主要体现在一个方面:OpenId的安全性和用户体验的矛盾。

整个单点登录的机制决定了OpenId是会出现在客户端的,所以OpenId需要有过期机制,假如用户在一个终端登录的话可以选择在用户每次登录或者每次退出时刷新OpenId,而在多终端登录的情况下就会出现矛盾:当一个终端刷新了OpenId之后其他终端将无法正常授权。

而最终,我采用了单用户多OpenId的解决方案。每次用户通过用户名/密码登录时,产生一个OpenId保存在Redis里,并且设定过期时间,这样多个终端登录就会有多个OpenId与之对应,不再会存在一个OpenId失效所有终端验证都失效的情况。

 

作者:一叶知秋

标签:OpenId,单点,登录,验证,用户,原理,子系统
From: https://www.cnblogs.com/88223100/p/The-principle-of-single-sign-on.html

相关文章

  • Redis核心数据结构与高性能原理(1)
    Redis安装下载地址:http://redis.io/download安装步骤:#安装gccyuminstallgcc#把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压wgethttp://download.redis.io/releases/redis-5.0.3.tar.gztar-zxvfredis-5.0.3.tar.gzcdredis-5.0.3#进入到解压好的......
  • TextCNN和TextRNN:原理与实践
    1.TextCNN原理CNN的核心点在于可以捕获信息的局部相关性,具体到文本分类任务中可以利用CNN来提取句子中类似N-Gram的关键信息。(1)一维卷积:使用不同尺寸的kernel_size来模拟语言模型中的N-Gram,提取句子中的信息。即TextCNN中的卷积用的是一维卷积,通过不同kernel_size的滤波器获取......
  • 残差神经网络:原理与实践
    VGGNet和GoogLeNet等网络都表明有足够的深度是模型表现良好的前提,但是在网络深度增加到一定程度时,更深的网络意味着更高的训练误差。误差升高的原因是网络越深,梯度弥散[还有梯度爆炸的可能性]的现象就越明显,所以在后向传播的时候,无法有效的把梯度更新到前面的网络层,靠前的网络层参......
  • 弯曲传感器原理及其应用
    介绍弯曲传感器:只能向着带刻度的一面单侧弯曲,未弯曲的电阻值约为25k—30k,弯曲到45度,电阻增大约65k弯曲传感器上云:使用ADC读取电压,通过map函数将电压转化为角度,将角度值通过MQTT协议传输到华为云IoT平台将代码放置在app下,并且修改案例代码成为需要的弯曲传感器数据找到对应的adc_exa......
  • smartbi token回调获取登录凭证漏洞(二)
    2023年8月8日Smartbi官方又修复了一处权限绕过漏洞。该漏洞是上一个特定场景下设置Token回调地址漏洞的绕过,未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。于是研究了下相关补丁并进行分析。0x01分析过程阅读相关补丁,可知此次漏洞与/smartbix/api/monitor/set......
  • 三河凡科科技飞讯教学篇:学习振弦采集模块的开发基本原理
    三河凡科科技飞讯教学篇:学习振弦采集模块的开发基本原理振弦采集模块是一种用于测量物体振动、形变、压力等物理量的电子设备。它通过测量物体的振动变化,可以得出物体在不同条件下的动态特性,对于工程设计、科学研究、医学检测等领域都有广泛应用。本文将介绍振弦采集模块的开发基......
  • 视频融合平台EasyCVR要求新用户首次登录强制修改密码
    EasyCVR平台是一个具有强大可拓展性的安防视频监控和视频集中存储解决方案。它支持云存储和磁盘阵列,能够快速、灵活地进行部署。EasyCVR平台支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,同时也支持厂家私有协议和SDK接入,如海康Ehome、海大宇等设备的SDK。该平台不仅具......
  • H5 及 web 页面微信授权登录流程
    https://blog.csdn.net/joe0235/article/details/115935515一、事先准备工作配置参数测试公众平台信息(测试号相关配置示例):1、打开公众平台的测试账号2、配置js接口安全域名3、扫码关注测试公众号4、修改网页授权地址配置授权回调的域名,至于什么是OAuth2.0,大家自行百度吧。这......
  • 22. 补充阅读-会计分类账户借贷标记的本质原理和规律
    作者:王会计王贻岩链接:https://www.zhihu.com/question/28385432/answer/281130552来源:知乎著作权归作者所有。  借贷记账法比其他复式记账法(增减记账法)简便、合理的原因就是因为其巧妙的账户结构设置规定:同类账户结构相同,异类账户结构相反。  什么意思,通过会计等式”资产......
  • 手机版 - imessage信息群发,苹果imessages短信,imessages推信,苹果手机推信,苹果imess
    Apple公司全线在macos与ios两个操作系统上内置了FaceTime与iMessage两个应用。完美替代运营商的短信与电话。并且FaceTime与iMessage的帐号不仅仅与AppleID绑定,同时也与使用这AppleID的手机号码绑定,这样的漏洞自然给无孔不入的群发垃圾信息商们提供了后门。这样iPhone的iMessa......