单点登录(Single Sign On),简称为 SSO,简单理解就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 二、何谓CAS CAS(Central Authentication Service)是耶鲁大学的一个开源项目,旨在为web应用系统提供一种可靠的单点登录解决方案。采用CAS最大的是从安全性角度来考虑的,用户在CAS录入用户名和密码之后通过ticket进行认证,不会在网上传输密码,保证安全性。 三、CAS中的关键词理解 ST(Service Ticket):服务票据,服务的唯一标识码,由TGT生成ST,返回给用户,接着拿着生成的ST去访问service,service又会把ST拿到CAS系统去验证,验证通过后才允许用户访问该资源。 TGC( Ticket Granting Cookie):CAS系统用来识别用户身份的凭证。 TGT(Ticket Grangting Ticket):授权票据,获取这TGT之后才能申请服务票据(ST),用户如果在CAS系统认证成功之后,就会生成TGC写入浏览器,同时也生成一个TGT,TGT对象的id就是cookie值。之后每次请求过来通过此cookie来从缓存获取TGT,就不用提交身份认证信息(Credentials)。 Session:各个应用系统会创建自己的session表示是否登录,而这里的每个session都是ST验证通过之后组装生成的。 四、实现原理 假设我们现在有应用系统A、应用系统B、CAS认证系统 1、第一次访问系统A时,没有票据(ST),也没有session,会重定向到CAS服务器,要求用户输入用户名和密码,之后CAS向浏览器写入TGC,同时生成TGT保存到缓存,CAS服务器会根据TGT生成ST,然后CAS会重定向到给应用系统A,CAS将这个ST和成功登录的用户,以及服务联系在一起。这个ST使用次数(numberOfUses)和有效时间(timeToKill)是可配置的,超过设置的次数或者超过有效时间就会失效。 2、应用系统A收到这个ST之后,它并不知道这个用户已经登录成功,就通过将ST 传递给一个校验URL,校验URL拿到Cas系统去验证,CAS通过验证之后返回用户信息,并且将ST作废。 3、应用系统A根据从CAS收到的用户信息将session创建起来,这样我们的应用就拥有了一个自己的session。 4、第一次访问另一个应用系统B,也是没有票据(ST),也没有session,会再次被重定向到CAS系统,CAS系统会去获得TGC,如果该TGC没有失效,直播,则拿到TGT生成ST给用户重定向到系统B,系统B拿到ST之后再去CAS系统验证(同应用系统B的验证方式),验证成功则创建session;如果 TGC失效,那么用户还是要重新认证。 5、再去访问系统A时,没有票据,因为票据只能用一次,但是我们有session,所以不用跳转到CAS去签发票据了,直接允许用户访问。 6、用户登出的时候,CAS系统接受请求后,会检测用户的TGC,把对应的session清除,同时会找到所有通过该TGC进行SSO登录的应用服务器URL提交请求,所有的回调请求中,包含一个参数logoutRequest,内容格式如下: <samlp:LogoutRequest Version="2.0" IssueInstant="[CURRENTDATE/TIME]"> <saml:NameID>@NOT_USED@</saml:NameID> <samlp:SessionIndex>[SESSIONIDENTIFIER]</samlp:SessionIndex> </samlp:LogoutRequest> 所有收到请求的应用服务器会解析这个参数,取得sessionId,根据这个Id取得session后,把session清除。 四、列举点融网统一验证中心后端的一个例子 现有两个系统,一个是techops应用系统,是web界面的管理控制台,通过techops录入资源,角色,做权限分配。 另一个是cas系统,即我们的单点登录系统,各个子应用系统通过cas做sso认证。 1、我在本地部署起来两个系统之后,第一次访问techops应用系统:8143/techops/,此时我们没有票据,也没有session会重定向到CAS系统。 CAS统一认证登录界面如下,我们看到的链接是::8142/cas/login?service=http%3A%2F%2Flocalhost%3A8143%2Ftechops%2Flogin%2Fcas 后面加入了一个service,通过decodeURIComponent('http%3A%2F%2Flocalhost%3A8143%2Ftechops%2Flogin%2Fcas');解析之后的样子:"http://localhost:8143/techops/login/cas",就是在用户登录成功之后跳转的URL。 2、我们输入用户名和密码,登录成功之后,会跳转到techops系统,直播,携带了一个ticket = ST-1-oYYmrbiaZ7LnFlA77rfr-cas01.dianrong.com(随机生成),同时我们也看到了CAS向浏览器写入了TGC。 techops系统界面如下: (责任编辑:本港台直播) |