接触CAS有一段时间,一直以来总听到别人说这是块难啃的骨头,于是我饿了,想啃一啃,CAS的原理其实还是比较好理解的,但是在实现的过程中确实出现了很多问题,而且CAS的Server和Client如果版本不合适的话,也会有这样那样的问题。下面和大家共享一下我做Cas的一些feeling。
CAS1.0
CAS1.0也称为基础模式
适用场合:
参与SSO的应用都为Web应用,且各应用之间相互独立,没有复杂的集成关系。
CAS2.0
CAS2.0称为代理模式
适用场合:
下面了解一下CAS的基本知识:
CAS协议定义了一组术语,一组票据,一组接口。
术语:Client、Server、Service、Proxy、Target。
接口:/login、/logout、/validate、/serviceValidate、/proxyValidate、/proxy
票据:TGT、ST、PGT、PGTIOU、PT
Client、CAS Server、Service三者,是通过各种票据的传递与验证,来实现单点认证功能的。
下面解释一下这些基本知识:票据,我想大家听起来都会比较熟悉,它就是个通行证,比如当你登录QQ的时候如果你记住密码、自动登录,你有了票据就可以登录,如果你没有记住密码,就需要有一个输入密码验证的过程。那票据呢又分了很多种。
TGT(TicketGrangtingTicket)是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。当HTTP请求到来时,CAS以此Cookie值为key查询缓存中有无TGT,如果有的话,则相信用户已登过。比如你之前登录过淘宝,当你再登的时候它会首先用票据核对,有对应的用户信息,则可以登录。
ST(ServiceTicket )是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户。用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。举个形象的例子,比如说你是想去看一场演唱会,你想进去人家首先会验票,一看你没票,人家就会先让你去买票,买完票以后验票的人会看看你是不是**的粉丝啊,于是查一下用户信息(TGT),有你,那你就会被安排的粉丝团。这个例子中演唱会就是一场服务,粉丝身份就是你进入粉丝专用座的TGT。