单点登录SSO的实现原理
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其它系统中登录,也就是用户的一次登录能得到其它全部系统的信任。单点登录在大型站点里使用得很频繁,比如像阿里巴巴这种站点,在站点的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,假设每一个子系统都须要用户认证,不仅用户会疯掉,各子系统也会为这种反复认证授权的逻辑搞疯掉。实现单点登录说究竟就是要解决怎样产生和存储那个信任,再就是其它系统怎样验证这个信任的有效性,因此要点也就下面几个:
- 存储信任
- 验证信任
仅仅要攻克了以上的问题,达到了开头讲得效果就能够说是SSO。最简单实现SSO的方法就是用Cookie,实现流程例如以下所看到的:
不然发现以上的方案是把信任存储在client的Cookie里,这样的方法尽管实现方便但立刻会让人质疑两个问题:
- Cookie不安全
- 不能跨域免登
对于第一个问题一般都是通过加密Cookie来处理,第二个问题是硬伤,事实上这样的方案的思路的就是要把这个信任关系存储在client,要实现这个也不一定仅仅能用Cookie,用flash也能解决,flash的Shared Object API就提供了存储能力。
一般说来,大型系统会採取在服务端存储信任关系的做法,实现流程例如以下所看到的:
以上方案就是要把信任关系存储在单独的SSO系统(暂且这么称呼它)里,说起来仅仅是简单地从client移到了服务端,但当中几个问题须要重点解决:
- 怎样高效存储大量暂时性的信任数据
- 怎样防止信息传递过程被篡改
- 怎样让SSO系统信任登录系统和免登系统
对于第一个问题,一般能够採用相似与memcached的分布式缓存的方案,既能提供可扩展数据量的机制,也能提供高效訪问。对于第二个问题,一般採取数字签名的方法,要么通过数字证书签名,要么通过像md5的方式,这就须要SSO系统返回免登URL的时候对需验证的參数进行md5加密,并带上token一起返回,最后需免登的系统进行验证信任关系的时候,需把这个token传给SSO系统,SSO系统通过对token的验证就能够辨别信息是否被改过。对于最后一个问题,能够通过白名单来处理,说简单点仅仅有在白名单上的系统才干请求生产信任关系,同理仅仅有在白名单上的系统才干被免登录。
以上仅仅是提供了些简单的实现技术,但须要强调的是这仅仅是技术实现而已,仅仅是为了解决上面谈到的一些问题,SSO本身来说并非什么高科技,有了这个认识比較有利于我们深入探索SSO
相关文章
- Java并发包中的同步队列SynchronousQueue实现原理
- 编译原理:正规式转变成DFA算法
- Struts2原理
- OCR 识别原理
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
- Kotlin 朱涛-3 原理 编译器 反编译 字节码
- When.js的原理及快速实现
- 超小Web手势库AlloyFinger原理
- SAP 电商云 Spartacus UI SiteContextParamsService 的实现原理解析
- Atitit maven配置pom文件 配置法v2 t33 目录 1. Maven打包war原理1 1.1. 在target目录生成war包ori目录。。。里面就是所有的资源1 1.2. 去掉
- Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结
- atitit.跨语言执行cmd cli api的原理及兼容性设计草案
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
- Atitit.javascript 实现类的方式原理大总结
- Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结
- Fiori里花瓣的动画效果实现原理
- 单步调试理解webpack里通过require加载nodejs原生模块实现原理
- Angular @Effect监听指定Action类型的实现原理
- 激活码方式注册的实现原理述
- 【计组笔记08】计算机组成与原理之IO设备系统(输入、输出设备、外存储器)
- Flink 原理与实现:架构和拓扑概览
- jsonp的原理·jsonp是不是ajax中实现跨域访问的技术
- 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
- 《Python智能优化算法:从原理到代码实现与应用》出版啦
- 你真的懂树吗?二叉树、AVL平衡二叉树、伸展树、B-树和B+树原理和实现代码详解...
- LIS系统通讯程序原理与实现
- 零拷贝实现原理
- PostgreSQL的学习心得和知识总结(一百零三)|深入理解PostgreSQL数据库开源MPP扩展Citus 分布表间连接规则类型JoinRuleType 的实现原理
- Gopher协议原理和限制介绍——Gopher协议支持发出GET、POST请求(类似协议转换):可以先截获get请求包和post请求包,在构成符合gopher协议的请求
- 回声消除的原理和应用场景