SSO单点登录的发展由来以及实现原理【转】
单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的
1、web单系统应用
早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的,所有的功能,所有的业务,后台管理,门户界面,都是由这一个war来支持的,这样的单应用,也称之为巨石应用,因为十分不好扩展和拆分。
在巨石应用下,用户的登录以及权限就显得十分简单,用户登录成功后,把相关信息放入会话中,HTTP维护这个会话,再每次用户请求服务器的时候来验证这个会话即可,大致可以用下图来表示:
如上图,这个会话就是session,维护了用户状态,也就是所谓的HTTP有状态协议,我们经常可以在浏览器中看到JSESSIONID,这个就是用来维持这个关系的key
这样,每次请求的时候只需要用拦截器来拦截当前用户的登录状态以及授权状态即可。
如果引入集群的概念,这个单应用可以分别部署在3台tomcat上,使用nginx来实现反向代理, 此时,这个session就无法在这3台tomcat上共享,用户信息会丢失(这里不考虑粘性和非粘性的session,我们不推荐做)
2、多应用构建的分布式集群系统
从巨石应用发展至今,我们有SOA,有微服务,其道理都是一样的,都是进行了业务拆分来分解为多个系统,多个系统完全解耦,可以分别部署在不同的服务器上,项目之间通过rpc或者restful来实现相互通信,举个栗子:
order.abc.com
cart.abc.com
service.abc.com
有这么3个系统,部署在不同的二级域名下,那么用户每次登陆不同的系统是不是都要登录呢?这样是不合理的,我们不能因为系统的复杂度使得用户也变得复杂,对于用户来说,一套产品就是一个完整的应用。登录一次即可,没有必要多次登录。
按照之前所说的session就不适用了,在这个地方我们就引入了单点登录,保持用户与服务端之间的无状态协议,生成token,使用token这个令牌穿梭在各个系统。
那么这个token放在浏览器cookie即可,失效时间需要和redis的expire一致,根据需求我们可以实现用户登录一次就可以在任何系统中使用,其次用户账户在别的地方登录后,上一个用户则被挤出。
(需要注意的是,这个cookie作为第一方cookie需要对二级域名进行设置,如果要跨域的话需要设置第三方cookie或者使用JWT来做,这个就不多说了)
3、单点登录SSO(Single Sign On)
对于分布式系统来说,我们需要sso这样一个用于单点登录的系统,可以独立部署在一个web服务器内,比如域名为 login.abc.com,其他所有web服务上的登录都可以通过这个sso来登录,app也可以调用登录
如果,所有的token都由sso来管理,这个token在浏览器可以存储在第一方cookie或者第三方都行,在ios或者安卓上也能够保持,每次访问服务的时候放入headers中,让拦截器进行验证即可。同时,这个token也可以扩展用来做权限。
4、手机端的单点登录
这个不难理解,就像微信那样,同一个用户只能在同一个手机端上登录,这个是用token+缓存就能实现,套用上面所说的拦截器,可以不需要写很多代码就能实现。
5、代码实现以及部署
关于这个我会在这段时间抽空写个简单小项目放在github上开源。
转自
SSO单点登录的发展由来以及实现原理
http://www.toutiao.com/i6470271886986052109/
SSO单点登录的发展由来以及实现原理【转】的更多相关文章
- SSO单点登录的发展由来以及实现原理
单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1.web单系统应用 早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的, ...
- SSO单点登录 与 CAS
本文转载自http://www.imooc.com/u/2245641/articles非常好的sso单点登录理解文章 作者: 常明,Java架构师 Web应用系统的演化总是从简单到复杂,从单功能到多 ...
- sso单点登录原理详解
sso单点登录原理详解 01 单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务 ...
- 使用 JSONP 实现简单的 SSO 单点登录
SSO 即 Single Sign On(单点登录). 一.二级域名之间的单点登录 不需要用到JSONP 或者 p3p 协议,直接使用 COOKIE 就行了,因为顶级域名相同就能实现 COOKIE ...
- CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- [sso] 单点登录认证流程
一.流程说明 第一步:访问cas过滤链接ssoLogin,拼凑定向到 CAS_SERVER 获取ticket的URL 第二步:CAS_SERVER校验用户信息,生成Ticket 第三步:重新定向到访问 ...
- php sso单点登录原理阐述
原理:就是用户登录了单点登录系统(sso)之后,就可以免登录形式进入相关系统: 实现: 点击登录跳转到SSO登录页面并带上当前应用的callback地址 登录成功后生成COOKIE并将COOKIE传给 ...
- SSO单点登录之跨域问题
第一次写博客,与大家共勉. 这里用到的原理其实非常简单,将cookie存在一个公共的站点的页面上就可以了,这里我们管那个站点叫主站S. 先说说所谓的跨域 环境1:a.xxx.com需要跟b.xxx.c ...
- cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)
转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: ...
随机推荐
- xpath定位相邻元素方法
在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素的兄弟元素(或叔伯元素的子元素).这里引入xpath的两个定位方法: preceding-sibling fo ...
- Qin Shi Huang's National Road System UVA - 1494(次小生成树)
秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度 ...
- 【DP】【CF31E】 TV Game
传送门 Description 给你一个长度为\(2n\)的数字,每次可以从左侧选一个数字,加入连接到一个数字\(A\)或另一个数字\(B\)后面.\(A,B\)初始为\(0\).\(A\)与\(B\ ...
- 【树状数组】【P3902】 递增
传送门 Description 给你一个长度为\(n\)的整数数列,要求修改最少的数字使得数列单调递增 Input 第一行为\(n\) 第二行\(n\)个数代表数列 Output 输出一行代表答案 H ...
- winform登录代码
Program.cs文件中 static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThr ...
- PID控制算法的C语言实现八 变积分的PID控制算法C语言实现
变积分PID可以看成是积分分离的PID算法的更一般的形式.在普通的PID控制算法中,由于积分系数ki是常数,所以在整个控制过程中,积分增量是不变的.但是,系统对于积分项的要求是,系统偏差大时,积分作用 ...
- [树莓派]wifi在面板看不到,但是可以scan到的解决方案
突然遇到一个问题,发现在wifi面板中找不到WiFi,但是运行scan命令可以发现WiFi,多方查找资料终于找到了一个解决方案: 运行如下命令: sudo apt-get install wicd ...
- Linux系统之路——用CentOS 7打造合适的科研环境
安装CentOS CentOS 7的安装与其他Linux发行版的安装差不多,个别地方稍有不同. 准备工作 准备材料 U盘:容量700M以上,用于制作U盘启动盘,因为在制作启动盘时会格式化U盘,所以U盘 ...
- windows多线程接口介绍和使用
一windows多线程接口: 1 创建线程 CreateThread 与 _beginthreadex都可以实现创建线程,两个函数的参数 相同, HANDLEWINAPICreateThread( L ...
- 《Apache HttpClient 4.3开发指南》
转载自:http://blog.csdn.net/chszs/article/details/16854747 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chs ...