文档章节

CAS集群解决方案

杨武兵
 杨武兵
发布于 2013/04/08 13:27
字数 1753
阅读 4.6K
收藏 26

阿里云携手百名商业领袖、技术大咖,带您一探行进中的数字新基建!>>>

1. 总体方案

本方案的目的是搭建一个高可用,高可伸缩的中心认证服务。环境是CAS服务器是可任意扩展的,任意一个CAS服务节点均是等效的,CAS服务器的状态信息是集中存储的;CAS服务的客户端应用也是集群的环境,客户端应用服务器也是可任意扩展的,客户端应用的session状态信息是集中存储的,任意两个应用服务节点都是等效的;CAS服务器和客户端应用的状态信息集中存储在缓存服务器Memcached上。该方案具有以下特性。

只支持Tomcat6.xTomcat7.x

无单点故障。

能够应对Tomcat故障转移。

能够应对memcached故障转移。

 



 

 注意:上述方案中有一个问题是如果cas服务端应用程序或者客户端应用程序将某些状态数据直接存储在jvm本地对象中的时候,则节点会出现不等效的情况,甚至出现不稳定的故障。该问题的解决办法是:1.避免这样的情况。2.同步各jvm实例之间的所有对象。

1.1. 正常登录流程(未单点登录)讨论

 


 
 

讨论用户的浏览器里无TGT cookie值,即未曾登录过CAS服务器。

1. 用户浏览器访问必联网受保护的资源,假设用户未登录必联网应用,由于必联网各节点的session状态集中存储,则任意一个节点都是等效的。

2. 用户浏览器被转发请求到cas服务器。同时会带上参数service,即带上必联网的URL地址。

3. 用户访问cas服务的/login地址。用户的cookie中不存在TGT值。Cas服务器生成LT,并返回登录页面给用户浏览器。

4. 用户在登录页面上输入正确的用户名和密码,提交到cas服务器。

5. cas服务器接收到用户的凭证信息。经过验证后,若正确,则生成TGT,并存储在Ticket仓库中,由于带上了service参数值,同时cas会为该service生成ST值。然后返回到用户浏览器,将TGT值写入到用户浏览器的cookie中,同时将浏览器重定向都service参数值制定的url值,附带参数ticket=ST值。

6. 用户再次访问必联网受保护资源。带上参数值ticket=ST。必联网应用中的过滤器检测到带有该参数后,会将参数serviceticket的值发送请求给casURL地址/serviceValidate。该地址会校验ST。校验结束后会返回一个校验结果给客户端应用,如果正确则会返回登录的用户名。客户端应用则会在本应用为该用户执行登录后处理,如加载用户信息和权限等放入到session中。至此登录完成。

7. 考虑用户访问到不同的服务器上。如用户第一次访问到必联网应用节点1,第二次访问都必联网节点2上,由于session信息是共享的,则两个节点是等效的。若用户第一次访问到cas节点1,第二次访问cas节点2,由于session和票据信息是共享集中存储的,用户访问到任意节点都是等效的,票据在任意节点都能够得到有效地认证。

结论:该情况的流程集群不存在问题。

 

1.2. 已单点登录流程





 
  

当用户浏览器有合法的TGT,即用户浏览器已经登录过CAS服务器。在这种情况下,用户再访问必联网,用户未登录必联网应用。

1. 用户访问必联网受保护的资源,由于必联网各节点的session状态集中存储,则任意一个节点都是等效的。由于用户未登录必联网应用,则会拦截该请求,将其请求转发到CAS服务器,同时会带上参数service,即带上必联网的URL地址。

2. 用户访问cas服务的/login地址。由于已经登录过cas服务器,则用户的cookie中存在TGT值,在对该TGT值进行验证,若正确,由于带上了service参数值,同时cas会为该service生成ST值。然后返回到用户浏览器,同时将浏览器重定向都service参数值制定的url值,附带参数ticket=ST值。

3. 用户再次访问必联网受保护资源。带上参数值ticket=ST。必联网应用中的过滤器检测到带有该参数后,会将参数serviceticket的值发送请求给casURL地址/serviceValidate。该地址会校验ST。校验结束后会返回一个校验结果给客户端应用,如果正确则会返回登录的用户名。客户端应用则会在本应用为该用户执行登录后处理,如加载用户信息和权限等放入到session中。至此登录完成。

4. 考虑用户访问到不同的服务器上。如用户第一次访问到必联网应用节点1,第二次访问都必联网节点2上,由于session信息是共享的,则两个节点是等效的。若用户第一次访问到cas节点1,第二次访问cas节点2,由于session和票据信息是共享集中存储的,用户访问到任意节点都是等效的,票据在任意节点都能够得到有效地认证。

结论:该情况的流程集群不存在问题。

 

 

1.3. 统一登出流程




 
 

假设用户A已经统一登录过CAS服务器节点1,必联网节点2和招标网节点1。用户这个时候想统一登出所有系统。要经过以下流程。

1. 用户A通过浏览器访问CAS服务器节点2的登出路径/logoutCAS服务器由于配置了集中存储session和票据,因此可以识别该用户的信息;首先销毁该用户对应的TGTCAS服务器的session信息。然后循环退出所有的已登录服务。

2. 退出用户A登录的必联网服务。假如CAS服务调用的是必联网节点1的登出地址,由于session共享,该节点能够正确地退出该用户,销毁该用户的session及其它登录信息。

3. 退出用户A登录的招标网服务。假如CAS服务调用的是招标网节点2的登出地址,由于session共享,该节点能够正确地退出该用户,销毁该用户的session及其它登录信息。

结论:该情况的流程集群不存在问题。

© 著作权归作者所有

杨武兵

杨武兵

粉丝 289
博文 61
码字总数 123254
作品 1
昌平
架构师
私信 提问
加载中

评论(0)

CAS server和CAS Client 各类文章总结

CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。CAS集群部署首先需要考虑的...

afreon
2016/11/24
274
0
cas4.2.7 集群服务搭建

cas服务端集群,网上资料很多,无非就是session共享,ticket共享。 但是session共享是必须的吗?或者能实现集群吗? 实践: 1. ticket共享,直接上代码 package org.jasig.cas.ticket; impo...

osc_r3t4hb0k
2018/05/16
4
0
CAS SSO单点登录ajax请求拦截,白名单循环重定向。

[背景] 公司有多个产品现需要实现多个产品之间的单点登录,现在采用的开源项目cas做的单点登录。 [需求] 现在阶段存在一下问题: 1、通过白名单实现URL过滤,过滤过程中会出现循环重定向的问...

allen_2288
2016/06/02
928
5
Navigate 2017:新华三9款重量级产品曝光

在4月8日举行的新华三Navigate2017领航者峰会上,新华三集团高级副总裁、首席技术官尤学军为我们带来了新华三9款产品的重磅发布,这9款产品分别涉及云计算、大数据、网络、安全等几大核心领域...

玄学酱
2018/04/13
0
0
开源 MIS 系统解决方案--jeeww

jeeww 是基于 spring+spring mvc+spring security+hibernate 为主的开源 MIS 系统解决方案,以 Maven 进行项目模块间的管理,便于扩展和管理,层次清晰,打造敏捷、清晰易用、松耦合、易扩展...

道在何方
2014/12/15
9.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

【Flutter组件终结篇】332个组件 658页PDF

老孟导读:历时1年的时间,整理完成了330+组件的详细用法,不仅包含UI组件,还包含了功能性的组件。 虽然整理了 330+的组件基本用法,但并不是让你每一个都学习一遍,任何技术基本都是掌握 ...

老孟Flutter
2分钟前
9
0
三星手机又中招:一张壁纸可引发系统崩溃 附临时解决方法

  前几天国内有大量用户发现三星手机崩溃、黑屏或者无限重启, 这可能是三星手机的日历 APP 的 bug。这件事还没完,三星手机今天又发现了新的问题,换上一张特别的壁纸就会导致系统崩溃,不...

alkcendkljk
14分钟前
7
0
查找当前目录和文件目录[重复] - Find current directory and file's directory [duplicate]

问题: This question already has answers here : 这个问题已经在这里有了答案 : How to properly determine current script directory? 如何正确确定当前脚本目录? (11 answers) (11个答...

技术盛宴
30分钟前
17
0
你不知道的java对象序列化的秘密

简介 你知道序列化可以使用代理吗?你知道序列化的安全性吗?每个java程序员都听说过序列化,要存储对象需要序列化,要在网络上传输对象要序列化,看起来很简单的序列化其实里面还隐藏着很多...

flydean
45分钟前
21
1
线程池

Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创...

Joker上上签
56分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部