CAS(Central Authentication Server)耶鲁大学开发的SSO产品。
服务器端使用 Servlet,通过SSL和客户端传递信息。
CAS java客户端使用Filter技术,拦截需要保护的资源URL。
CAS两种模式:Agent和Proxy
1. Agent模式原理:
(1)用户访问APP,APP未得到ST,重定向到IDP;
(2)用户在IDP登录成功之后,IDP生成TGT并放在Agent(浏览器),作为会话标识;
IDP为RP(APP)生成ST并缓存,ST返回到Agent;
(3)Agent重定向到APP并出示ST;
(4)APP得到ST,建立SSL通道将ST发送到IDP进行验证;
(5)IDP验证ST,清除ST,并返回验证结果;
(6)APP得到Agent的用户登录状态。
Proxy模式原理:
(1)同Agent模式
(2)同Agent模式
(3)同Agent模式
(4)App得到ST,建立SSL通道,发送ST的同时发送一个PGT URL到IDP
(5)IDP验证ST,清除ST,生成PGT和PGTIOU,并一起发送到APP
(6)APP得到Agent的用户登录状态;并且拿到一个PGT和PGTIOU, PGT被APP保存。
到这里,Proxy验证用户身份完成,同时也拿到了PGT以便作为用户代理去访问其他应用。
下面是App代理用户访问APP2的流程:
(7)APP向IDP发送PGT和APP2标识
(8)IDP验证PGT,生成一个PT(上面写着:APP希望通过代理方式访问APP2),缓存PT
(9)APP接收到PT,向APP2发送请求,带着PT
(10)APP2收到PT,向IDP发送验证请求,参数是APP2标识和PT
(11)IDP验证PT,销毁PT,返回APP代理的用户名称和APP的PGT URL
(12)APP2决定是否愿意让APP代理该用户,如果愿意,则返回数据
(13)APP得到APP2的服务,这样代理过程结束
如果APP又要访问APP3,则重复(7)到(13)的过程
几个关键点
1. 安全性依赖:CAS依靠SSL来传递TGT、PGT保证机密性;ST、PT验证一次之后失效,防止重放攻击
2. ST依靠TGT获得,PT依靠PGT获得;
ST、PT是一次性的,TGT、PGT的生命期是整个会话;
TGT存放在Agent(浏览器),PGT存放在Proxy(APP)