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. 目标: ...
随机推荐
- Css实现拖动效果
效果如下,可以拖动滑块,数字显示的是离左侧距离:
- 【Django】Django—Form两种解决表单数据无法动态刷新的方法
一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多” from django.db import models class Classes(models. ...
- Arrays.toString 如果传入的是对象 那么调用的是此对象的toString
Arrays.toString(Object[] obj) 如果传入参数的是对象 那么调用的是此对象的toString
- Using the command line to manage files on HDFS--转载
原文地址:http://zh.hortonworks.com/hadoop-tutorial/using-commandline-manage-files-hdfs/ In this tutorial ...
- Codeforces 748D Santa Claus and a Palindrome
雅礼集训期间我好像考完试就开始划水了啊 给出k个长度相同的字符串,每个串有一个权值,选出一些串连成一个回文串.使得选中的串的总权值最大. 如果选一个串,必须同时选一个对称的串.还有一个特殊情况是可以在 ...
- 【PDF】HTML中嵌入pdf的简单方法
<embed src="> 或者你不想显示某些功能的话: <embed src=">
- vs2003一查找就卡死了
Visual Studio 2003一查找就卡死了.解决办法如下: win7 32位下 解决方法:找到VS2003的安装目录,修改"...\Microsoft Visual Studio . ...
- 010. C++ 传值与传引用
1.参数传递 参数传递:pass by value vs. pass by reference(to const) 推荐:能传引用,尽量传引用(高效,尤其在需要拷贝的对象很大时) class comp ...
- rename table table1 to table2;
1. MYSQL rename table table1 to table2;
- Nginx -- proxy_pass配置
一.proxy_pass 作用域: location 不影响浏览器地址栏的url 设置被代理server的协议和地址 协议可以为http或https 地址可以为域名或IP 二.配置规则 2.1 测试环 ...