CAS SSO bug fix

来源:互联网 发布:mac类似powerdesigner 编辑:程序博客网 时间:2024/06/05 19:02

前言

单点登录(Single Sign On , 简称 SSO)是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。Yale大学CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架.
使用该框架出现下面两个bug:

  • logout需要刷新才能自动跳转到login
  • ST(Service ticket)和URL不符

Cookie和Session

这篇博客不错
cookie浏览器,session服务器,session安全存敏感,cookie长效不安全

CAS

这篇博客不错

术语

 CAS的核心就是其Ticket,及其在Ticket之上的一系列处理操作。CAS的主要票据有TGT、ST、PGT、PGTIOU、PT,其中TGT、ST是CAS1.0(基础模式)协议中就有的票据,PGT、PGTIOU、PT是CAS2.0(代理模式)协议中有的票据。只关心CAS1.0

TGT(Ticket Grangting Ticket)

sever存放的session

broswer存放的cookie

ST(ServiceTicket)

Cas20ProxyReceivingTicketValidationFilter验证

之间的关系

服务器端存放Session(TGC.A->TGT1(cookie,userinfo),TGC.B->TGT2,…)
浏览器端存放Cookie(TGC(sessionid),TGC2,…)

SSO流程

没有看源码,通过理解博客内容所画,等待看过源码后发现又没有错误。
CAS流程图

Created with Raphaël 2.1.0Broswer request serviceAuthenticationFilterCheck Cookie CacheCheck STCas20ProxyRecevingTicketValiditionFilterValidate STserviceExceptionCheck TGC in CookieGenerate STReturn service URL with ST and Broswer save TGC,Will Restart this flow but with TGT and TGCReturn loginURL with serviceAuthenticateSave TGTyesnoyesnoyesnoyesnoyesno

流程中注意的地方

  • 配置单点登出,一定要按照SingleSignOutHttpSessionListener->SingleSignOutFilter->AuthenticationFilter->Cas20ProxyReceivingTicketValidationFilter->HttpServletRequestWrapperFilter->AssertionThreadLocalFilter的顺序
  • AuthenticationFilter和Cas20ProxyReceivingTicketValidationFilter在认证或验证ST通过后可以通过设置中的serverName、service来配置重定向地址,区别是serverName可以带参数而service是固定地址。

跨域问题

什么是跨域

这篇博客不错
JavaScript同源策略的限制

解决

前台不用深入,几个关键点如下:
1. 因为是JS的问题,后台访问没有问题
2. 新版支持添加header,支持跨域。前提是response有这个头(可以后台加filter人为添加),然后ajax用指定方法访问

缓存问题

这个回答不错
这个回答还行

总结

针对前言中的两个bug:
1.logout

  • 原来是添加了id=logout的点击事件,事件中ajax 先访问logout的servlet,servlet只清理本地缓存,然后js中访问CASlogout地址。为防止跨域问题,改为直接跳转(href)logout,然后在servlet中sendRedirect到CAS的logout。
  • 经过验证,CAS顺序等配置没有问题,最后返现是chrome的缓存问题,尽管我指定了index.html中的head不缓存,但是chrome还是缓存,所以只能为CAS logout重定向地址指向如下:
String location = "https://cas.zyxing.com/caso/logout?service=http://flightlivewatch.flight.zyxing.com/index.html?timestamp=" + timestamp;

2.验证ST不符报错
* 可以设置不报错
* 根本原因是使用了短域名,导致存储的TGT和访问地址不一致,导致报错

0 0
原创粉丝点击