一,业务分析

在分布式系统架构中,假设把上述的三个子系统部署在三个不同的服务器上。前提是用户登录之后才能访问这些子系统。那么使用传统方式,可能会存在这样的问题:
1.当访问用户中心,需要用户登录帐号
2.当访问购物车,还需要用户登录帐号
3.当访问商品结算,又一次需要用户登录帐号

访问每一个子系统都需要用户登录帐号,这样的体验对于用户来说是极差。而使用单点登录就可以很好地解决上述的问题。

二,单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的 session 是无法解决的,我们需要使用相关的单点登录技术来解决。

第一步:用户访问应用系统1。过滤器判断用户是否登录,没有登录,则重定向(302)到认证系统去进行认证操作。

第二步:重定向到认证系统,显示登录界面,用户输入用户名密码。认证系统将用户登录的信息记录到服务器的session中。

第三步:认证系统给浏览器发送一个特殊的凭证ticket,浏览器将凭证交给应用系统1,应用系统1则拿着浏览器交给他的凭证ticket去认证系统验证凭证ticket是否有效。凭证ticket若是有效,将用户信息保存到应用系统1的session中一份,并告知应用系统1,用户通过认证。

第四步:用户通过认证,浏览器与网站之间进行正常的访问。

第五步:当用户再次访问应用系统1,由于应用系统1的session中有用户信息,所以就不用经过认证系统认证,就可以直接访问应用系统1了。

第六步:当用户再去访问其他应用系统时,浏览器会带着凭证ticket过去,其他应用系统到认证系统验证凭证,凭证ticket若是有效,将用户信息保存到其他应用系统的session中一份,并告知其他应用系统,用户通过认证。

第七步:用户通过认证,浏览器与网站之间进行正常的访问。

第八步:当用户再次访问其他应用系统,由于其他应用系统的session中有用户信息,所以就不用经过认证系统认证,就可以直接访问其他应用系统了。

三、Yelu大学研发的CAS(Central Authentication Server)

1.什么是CAS?

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
【1】开源的企业级单点登录解决方案。
【2】CAS Server 为需要独立部署的 Web 应用。这个CAS框架已经提供
【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:

2.CAS的详细登录流程

该图主要描述
1.第一次访问http://shopping.xiaogui.com
2.在登录状态下第二次访问http://shopping.xiaogui.com
3.在登录状态下第一次访问http://pay.xiaogui.com

下面对图中序号代表的操作进行说明

当用户第一次访问http://shopping.xiaogui.com

序号1:用户请求http://shopping.xiaogui.com,会经过AuthenticationFilter认证过滤器(在cas client 的web.xml中配置)

主要作用:判断是否登录,如果没有登录则重定向到认证中心。

大概知道这个就行,CAS的具体实现会在以后的博客中写道

序号2: AuthenticationFilter发现用户没有登录,则返回浏览器重定向地址。

重定向的地址就是认证服务器CAS Server的地址,后面的参数是我们请求的客户端地址,这个参数目的就是为了认证成功以后,根据这个参数的地址重定向回请求的客户端

序号3: 浏览器根据响应回来的重定向地址,向cas.xiaogui.com认证系统发出请求

序号4: 认证系统cas.xiaogui.com接收请求,响应登陆页面

序号5::用户登陆页面输入用户名密码,提交请求

序号6::CAS Server 认证服务器接收用户名和密码,就行验证,验证逻辑CAS Server 已经实现,并响应给浏览器信息

这里的用户名,密码不需要关心,后续会讲到

图中1,2部分表示序号5 输入的用户名,密码,以及发出的请求。当认证服务器验证通过之后,根据请求参数service的值,进行重定向,其实就是回到了请求的客户端,同时会携带一个ticket令牌参数。同时会在Cookie中设置一个TGC,该cookie是网站认证系统cas.xiaogui.com的cookie,只有访问这个网站才会携带这个cookie过去。

*****注意:这个携带TGC的Cookie是实现CAS单点登录的关键所在!

Cookie中的TGC:向cookie中添加该值的目的是当下次访问cas.xiaogui.com认证系统时,浏览器将Cookie中的TGC携带到服务器,服务器根据这个TGC,查找与之对应的TGT。从而判断用户是否登录过了,是否需要展示登录页面。TGT与TGC的关系就像SESSION与Cookie中SESSIONID的关系。
TGT:Ticket Granted Ticket(俗称大令牌,或者说票根,他可以签发ST)
TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根据他可以找到TGT。
ST:Service Ticket (小令牌),是TGT生成的,默认是用一次就生效了。也就是上面数字3处的ticket值。

序号7: 客户端拿到请求中的ticket信息,也就是图中1的位置

然后经过一个ticket过滤器Cas20ProxyReceivingTicketValidationFilter,去认证系统CAS Server判断ticket是否有效

这个过滤器的主要工作就是校验客户端传过来的ticket是否有效

CAS Client 客户端 shopping.xiaogui.com 中web.xml的配置

序号8: 向CAS Server认证系统发出验证ticket的请求,也就是图中2的位置,然后执行ticket验证

序号9: 通过校验之后,把用户信息保存到客户端的session中,并把客户端的SessionID设置在Cookie中,同时告知客户端ticket有效。当用户再次访问该客户端,就可以根据Cookie 中的SessionID找到客户端的Session,获取用户信息,就不用再次进行验证了。也就是图中响应给浏览器的部分。

序号10: shopping.xiaogui.com客户端接收到cas-server的返回,知道了用户已经登录,ticket有效,告知浏览器可以进行访问。

至此,用户第一次访问流程结束。

当用户第二次访问http://shopping.xiaogui.com

序号11:当用户第二次访问,仍然会经过AuthenticationFilter过滤器,但与第一次访问不同的是此时客户端session中已经存在用户的信息,浏览器中的Cookie会根据SessionID找到Session,获取用户信息,所以不需要进行验证,可以直接访问。

序号12: 客户端告知浏览器可以进行访问。

当用户第一次访问http://pay.xiaogui.com

序号13: 用户向pay.xiaogui.com CAS Client客户端发出请求

序号14: :pay.xiaogui.com接收到请求,发现第一次访问,于是给他一个重定向的地址,让他去找认证中心登录。

序号15:浏览器根据上面响应的地址,发起重定向,因为之前访问过一次了,因此这次会携带上次返回的Cookie:TGC到认证中心。

序号16: 认证中心收到请求,发现TGC对应了一个TGT,于是用TGT签发一个ticket,并且返回给浏览器,让他重定向到pay.xiaogui.comCAS Client客户端。

序号17:根据上面响应回来的地址,进行重定向到pay.xiaogui.comCAS Client客户端

序号18: pay.xiaogui.comCAS Client客户端带着ticket去认证中心验证是否有效。

序号19: 认证成功,把用户信息保存到客户端的session中,并把客户端的SessionID设置在Cookie中。当用户下次访问pay.xiaogui.comCAS Client客户端,直接登录,无需验证。

序号20: 告知浏览器可以进行访问


CAS单点登录的原理分析大致就是上述的这些,至于CAS单点登录的具体实现,将在下篇博客中写道。

CAS单点登录原理分析(一)相关推荐

  1. CAS单点登录原理解析及相关配置

    1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中 ...

  2. cas单点登录原理碎碎念

    2019独角兽企业重金招聘Python工程师标准>>> 也许有一天,你去面试,当面试官问你做cas的经验的时候,你会怎么描述? cas单点登录的原理? 单点登录是分为基于sessio ...

  3. CAS单点登录原理简单介绍

    1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...

  4. CAS教程-第一篇-CAS单点登录原理解析

    转载自:http ://www.cnblogs.com/lihuidu/p/6495247.html 1,基于饼干的单点登录的回顾 基于Cookie的的单点登录核心原理: 将用户名密码加密之后存于饼干 ...

  5. CAS单点登录原理(包含详细流程,讲得很透彻,耐心看下去一定能看明白!)

    一.CAS简介和整体流程 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS ...

  6. cas单点登录原理与实现(整合springsecurity)

    一.cas原理分析 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.CAS是一种基于http协议的B/S应用系统单点 ...

  7. 单点登录原理分析及CAS实战

    前端需要了解的 SSO 与 CAS 知识

  8. CAS单点登录的实现(二)

    这篇文章对CAS单点登录具体实现的一些步骤就行讲述,至于CAS单点登录的实现原理分析,请参看下面这篇文章: CAS单点登录原理分析(一) https://blog.csdn.net/qq_412582 ...

  9. CAS单点登录的实现

    这篇文章对CAS单点登录具体实现的一些步骤就行讲述,至于CAS单点登录的实现原理分析,请参看下面这篇文章: CAS单点登录原理分析(一) https://blog.csdn.net/qq_412582 ...

  10. cas跨域单点登录原理_CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

最新文章

  1. 高效精细化管理企业工单
  2. 管理软件售前咨询与企业架构
  3. Ubuntu 19.10 19.04 18.04 18.10等系统版本修改国内镜像源 国内更新源
  4. python map(function, iterable, ...) 内置函数的用法 (序列迭代调用并返回)
  5. linux 基础命令总结
  6. Chapter 4, FAQ about Master Theorm, exercises and problems
  7. 三角形和矩形傅里叶变换_信号与系统:第三章傅立叶变换2.ppt
  8. mysqld: [Warning] World-writable config file ‘/etc/my.cnf‘ is ignored.问题解决
  9. Bootstrap中的网格系统
  10. input和textarea的区别
  11. pdf如何解除加密?
  12. 分享 MSDN 下载工具(Word/PDF)
  13. 微信小程序导航:官方文档+精品教程+demo集合(6月12日更新)
  14. 【解决】 io.lettuce.core.RedisCommandExecutionException: ERR wrong number of arguments for 'set' command
  15. php 三才五格计算,姓名、名字笔划算命五格测试算命计算方法
  16. 笔记本固态硬盘大容量升级系统迁移(三天时间亲自实践,避坑专用)
  17. 【Android折叠屏适配】基于AutoSize框架适配折叠屏并兼容多窗口模式
  18. python输入中文教程_如何用Python从头开始实现一个中文拼音输入法?
  19. 一键adb关闭系统更新 坚果手机_华为手机通过ADB永久关闭系统更新
  20. 在资源管理器中隐藏指定分区

热门文章

  1. 昂达vi40精英版刷Linux,昂达Vi40精英版V1.0固件专业网友实测
  2. 2014中国十大管理实践-世界经理人网站
  3. VBS实现QQ自动登录
  4. 创建MSN界面式的Ext JS布局
  5. 值得注意的两个friendster新服务:校友和web共享搜索
  6. 基于javaweb+JSP+Servlet火车票网上订票系统(前台、后台)
  7. SIM卡电气特性详解
  8. 数字电路逻辑设计_第三版_微课版_第四章思考题与练习题(附答案)
  9. alfafile中转站免费_免费、不限速的文件中转站or网盘
  10. 批改网作文提交时分析不出来_推荐一款免费英语写作批改软件