单点登录(sso)入门

单点登录的英文名叫做Single Sign On,简称SSO。

在以前,一般我们就单系统,所有的功能都在同一个系统上。

后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。

比如阿里系的淘宝和天猫,很明显地我们可以知道这时两个系统,但是你在使用的时候,登陆了天猫,淘宝也会自动登陆。简单来说,单点登陆就是在多个系统中,用户只需要登陆一次,各个系统即能感知到该用户已经登陆。

单系统登陆

众所周知,HTTP是无状态的协议,这意味着服务器无法确认用户的信息。于是乎,W3C就提出了给每一个用户都发出一个通行证,无论谁访问的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息。通行证就是Cookie。

如果说Cookie是检查用户身上的通行证来确认用户的身份,那么Session就是通过检查服务器上的客户明细表(通行证列表)来确认用户的身份的。Session相当于在服务器中建立了一份客户明细表(通行证列表)。

因为HTTP协议是无状态的,因此Session不能依据HTTP连接来判断是否是同一个用户。于是服务器向用户浏览器发送了一个名为JessionId的Cookie,它的值是Session的id值,然后Session就可以根据Cookie来识别是否是同一个用户。

一般的单系统实现登陆功能都是以下几个步骤:

1.登陆后,将用户信息保存在Session对象中。如果在Session对象中能查到,说明已经登陆;如果在Session对象中查不到,说明没有登陆(或者已经退出登陆)。

2.注销(退出登陆)时,从Sessoin中删除用户的信息。

3.记住我,请求配合Cookie的发送。只要Session还没有失效,即使在关闭浏览器后,重新打开浏览器还能保持登陆状态。这一步骤也就是身份校验,通常使用拦截器来实现。

多系统登陆的问题与解决方法

Session共享问题

单系统登陆功能主要是用Session保存用户信息来实现的,但是多个系统就可能有多个Tomcat,而Session是依赖当前系统的Tomcat,所以系统A的Seesion和系统B的Session就存在一个共享的问题。

解决系统之间Session共享问题有以下几种方案:

1.Tomcat集群Session全局复制(集群内每个Tomcat的Session完全同步),但是这种方案会影响集群的性能,一般不建议。

2.使用反向代理服务器,将请求的IP根据Hash映射到对应的机器上,这样的话同一个IP地址的请求会一直被转发到同一台服务器上。常见的解决方案就是使用Nginx作为反向代理服务器,并使用其ip_hash负载均衡策略。这种方案可能会因为服务器承受不住高并发而宕机导致丢失大部分的Session数据,因此也不建议这么做。

3.把Session放到Redis缓存中,各个服务器读写同一个Redis缓存实现Session的共享。Redis的性能好,吞吐量大,还提供持久化到磁盘的功能,一般推荐使用这个方案。

Cookie的跨域问题

当我们请求www.yanggb.com的时候,浏览器会自动把www.yanggb.com的Cookie带过去,但是却不会把www.renj.com的Cookie带过去,这时因为域名不同导致的跨域问题。具体地说,这时浏览器的同源策略导致的问题,同源策略不允许JS访问跨域的Cookie,当发送请求的时候需要调用JS去浏览器的Cookie库中获得Cookie,这时候因为Cookie中保存有域名的属性作为识别标签,JS是拿不到非本域的Cookie的。

针对Cookie的跨域问题,主要有几种解决方案:

1.使用Token代替Session。服务端将Cookie写到客户端后,客户端对Cookie进行解析,将Token解析出来存放到SessionStroage中,此后的请求就把这个Token带上进行身份校验。

2.多个域名共享一个Session,在写入到客户端的时候设置Cookie的domian。

CAS原理

说到单点登陆的话,肯定要接触到CAS。CAS的全称是Central Authentication Service,即中心验证服务,说白了就是一个独立的认证中心。

假定现在有3个服务,一个是www.yanggb.com,一个是www.renj.com,还有一个是www.sso.com,其中的www.sso.com就是认证中心。

1.当用户想要访问www.yanggb.com受限(需要登陆)的资源的时候,www.yanggb.com发现用户没有登陆,就会重定向到www.sso.com认证中心,并将自己的地址作为参数,比如:www.sso.com?service=www.yanggb.com。

2.这时www.sso.com认证服务如果发现用户没有登陆,就会将用户引导至登陆页面。用户使用用户名和密码进行登陆之后,用户与认证中心就会建立一个全局的会话(生成Token写入到Cookie中并保存在浏览器上)。然后认证中心就可以重定向会到www.yanggb.com服务,并把Token携带过去:www.yanggb.com?token=********。

3.接着www.yanggb.com就会去www.sso.com认证中心校验这个Token是否正确,如果正确,则www.yanggb.com服务就会和用户建立局部的会话(创建Session)。

4.接下来,用户想要访问www.renj.com受限(需要登陆)的资源,www.renj.com服务发现用户并没有登陆,就会重定向到www.sso.com认证中心,同样将自己的地址作为参数:www.sso.com?service=www.renj.com。因为之前的用户与www.sso.com认证中心已经建立了全局会话,所以这次www.renj.com重定向到www.sso.com认证中心是可以带上Cookie的。认证中心根据带过来的Cookie发现已经与用户建立了全局会话了,就会重定向到www.renj.com,并把Token携带过去给www.renj.com,重定向的地址:www.renj.com?token=********。

5.最后,www.renj.com就会去www.sso.com认证中心校验这个Token是否正确,如果正确,则www.renj.com就和用户建立局部会话(创建Session)。

实际上,SSO认证中心就类似于一个中转站,这就是CAS的核心思想。

 

"世界上最残忍的不是逃离,而是近在咫尺却不属于自己。"

转载于:https://www.cnblogs.com/yanggb/p/11136528.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cocopods的升级错误解决

2019独角兽企业重金招聘Python工程师标准>>> 写在前面: 这篇笔记的由来,是因为在这个周五下班后想起了之前 GitHub 上一个关于 iOS Charts 的 demo 仍处于未完待续的状态。便想着完成了它,遂打开了该工程,开始用 pod 更…

XML 命名空间以及它们如何影响 XPath 和 XSLT (Extreme XML)

Dare Obasanjo Microsoft Corporation 2002 年 5 月 20 日 本文是有望长期发表的系列文章的第一篇,这些文章专门阐释由 Microsoft 支持的 W3C XML 技术的更微妙的内容。尽管 XML 的核心仍相当简单,但是围绕它的技术已经变得日益复杂,而且其中…

帆软报表(finereport)点击事件对话框打开

点击事件对话框打开iframe var iframe $("<iframe id001 name001 width100% height100% scrollingyes frameborder0>") // iframe参数的命名及宽高等iframe.attr("src", "http://192.168.100.17:8075/WebReport/ReportServer?reportlet1.cpt&…

部署虚拟环境

创建虚拟环境 导入Virtualenv虚拟环境模块 pip install virtualenv python -m pip install virtualenv 创建虚拟环境 cd 项目文件夹 virtualenv 虚拟环境名 激活虚拟环境 cd 虚拟环境文件夹 运行 Scripts 目录下的 activate 脚本 Scripts\activate 退出当前虚拟环境 Scripts\d…

走马观花:Visual Studio Code Name Orcas Mar07CTP /体验DLINQ

不知道什么叫“Orcas”&#xff1f;简单说应该就是下一版本的Visual Studio 吧。现在atlas&#xff0c;LINQ&#xff0c;WF之类东西&#xff0c;对于VS2005是单独安装的&#xff0c;Orcas应该是全内置吧。还有很多功能的增强&#xff0c;可以参考英文说明。闲话不说&#xff0c…

各种学习资源

C&#xff1a;http://huangdingjun.blog.163.com/ 网易博客 有好多关于C的博文 http://hi.baidu.com/dudiaodaoke/home独钓刀客 vim&#xff1a;http://easwy.com/blog/ vim linux 牛人 http://www.swaroopch.com/notes/Vim_zh-cn:%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E7%BC…

智课雅思词汇---二十六、形容词后缀-ble

智课雅思词汇---二十六、形容词后缀-ble 一、总结 一句话总结&#xff1a; assemble 英 [əsemb(ə)l] 美 [əsɛmbl] vt. 集合&#xff0c;聚集&#xff1b;装配&#xff1b;收集vi. 集合&#xff0c;聚集[ 过去式 assembled 过去分词 assembled 现在分词 assembling ] 词根词…

[导入]C#实现Des加密和解密

文章来源:http://blog.csdn.net/21aspnet/archive/2007/03/24/1540018.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/25/816385.html

帆软报表(finereport)图表钻取详细类别 当前页对话框展示

添加参数栏&#xff0c;季度下拉框的控件命名为 jd 这里添加雷达图做案例 编辑→特效→ 添加JavaScript 参数&#xff1a;wd 值&#xff1a;分类名 #取雷达图所点击的点 参数&#xff1a;jd 值&#xff1a;公式$jd #取参数下拉所选参数 JavaScript详细: var if…

聊聊storm的PartialKeyGrouping

序 本文主要研究一下storm的PartialKeyGrouping 实例 Testpublic void testPartialKeyGrouping() throws InvalidTopologyException, AuthorizationException, AlreadyAliveException {String spoutId "wordGenerator";String counterId "counter";Strin…

ArcGIS Server安装的几个问题

今天安装 了ArcGIS Server &#xff0c;本来一直不愿意装这么“重”的东西&#xff0c;不过新事物还是要看看。安装没有出很大的问题&#xff0c;基本上一次成功&#xff0c;比很久前&#xff08;大概要到03年了吧&#xff09;第一次装ArcIMS要好多了&#xff0c;那次可是重装…

大数据之MySql笔记-0916

2019独角兽企业重金招聘Python工程师标准>>> 复习: 1.MySQL部署 拓展题: rm -rf $MYSQL_HOME/arch/* binlog日志 恢复 主从同步 rm -rf $MYSQL_HOME/data/* 数据 $MYSQL_HOME/scripts/mysql_install_db \ --usermysqladmin \ --basedir/usr/local/mysql \ --dat…

delphi调用c#写的webservice中文出现乱码的问题

解决方法&#xff1a;HTTPRIO1的属性---HttpWebNode--UseUtf8InHeader设置为true 代码片断&#xff1a; function TLoginManager.Get_LoginManagerSoap: ILoginManagerSoap; const defSvcLoginManager; defPrtLoginManagerSoap; var RIO: THTTPRIO; begin Result: nil…

浮浮沉沉的上海

来到上海已经快有一年&#xff0c;抱着学习的心态来的&#xff0c;却发现忘掉了更多&#xff0c;最近一直在回顾&#xff0c;总想把冷却的技能重新拾回来&#xff0c;却也发现不简单。刚刚从餐北斗辞职&#xff0c;也正如朋友所说&#xff0c;趁早走&#xff0c;再迟一点&#…

GridView的操作大全

一、GridView和DataGrid的异同 GridView 是 DataGrid的后继控件&#xff0c;在.net framework 2 中&#xff0c;虽然还存在DataGrid&#xff0c;但是GridView已经走上了历史的前台&#xff0c;取代DataGrid的趋势已是势不可挡。GridView和DataGrid功能相似&#xff0c;都是在we…

Sql Server设置用户只能查看并访问特定数据库

1.新建登录用户 以管理员身份登陆数据库&#xff08;权限最高的身份如sa&#xff09;&#xff0c;点击安全性->登录名&#xff0c;右键新建登录名&#xff0c;输入登录名和密码&#xff0c;取消强制实施密码策略。 2.将服务器角色设置为public 注意&#xff1a;很重要的一…

arcgis jsapi接口入门系列(6):样式

2019独角兽企业重金招聘Python工程师标准>>> symbol: function () {//线样式//样式详情请看官方文档let style {//线颜色&#xff0c;支持多种格式&#xff1a;//CSS color string&#xff1a;例如"dodgerblue";//HEX&#xff1a;例如"#33cc33"…

ORM(四)应用.脚本管理工具

ORM(四)应用.脚本管理工具数据脚本的维护,不知道各位有什么好的工具推荐没有,由于以前一直是用手工来进行脚本的维护操作,很麻烦,而且容易出错.大多数时候,都在原来的基础上进行直接修改.今天有点时间就完成了一个简陋的工具,也是对ORM组件的应用.下面是程序的运行界面http://f…

OpenCV2:应用篇 三维重建

一.简介 VTK(Visualization Toolkit):开源三维图形库 ITK(Insight Segmentation and Registration Toolkit):开源医学图像处理库,包含医学算法和支持医学图片格式DICOM QT:用户图形界面 转载于:https://www.cnblogs.com/k5bg/p/11232131.html

手把手教你搭建Mac环境微信小程序的本地测试服务器

问题的提出 Mac环境方便快捷地搭建小程序的测试服务器 小程序对于网络请求的URL的特殊要求 不能出现端口号不能用localhost必须用https主要步骤 用json-server搭建简单的服务器&#xff0c;搭建出来的服务器地址为localhonst:3000安装nginx进行反向代理&#xff0c;以便隐藏端口…