竹笋

首页 » 问答 » 常识 » 用户统一认证SSO解决方案CAS
TUhjnbcbe - 2025/2/7 17:17:00
哪家治疗白癜风医院好 http://www.xxzywj.com/

介绍

单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

CAS(CentralAuthenticationService)是耶鲁大学的开源项目,旨在为Web应用系统提供一种可靠的单点登录解决方法。

CAS开始于年,并在年12月正式成为JA-SIG的一个项目。

编写目的

本文档作为sodb应用系统认证集成手册,旨在指导sodb集成系统实现统一身份认证和登录集成。

包括了SSL安全证书认证、CAS客户端配置。

术语与缩略语

整体认证流程

流程说明:

1、app端有session时,无需再次请求cas服务端(实线部分的流程即可)。

2、app端有st,则直接校验即可(无须重定向到cas服务端获取st)。

3、只有当1、2都不满足,或者校验不通过时,才会唤起输入用户名和密码的页面。

4、cas是集成了spring-webflow的,而对应的信息又保存在cas_server端的session中。所以要分布式部署的话,不能忘了session的共享。

票据说明:

1、TGC(Ticket-grantingcookie),是存放在浏览器中的,从它是名字就能判断出来。

2、包含用户信息的session保存在app服务端和cas的服务端

3、TGT(Ticket-grantingTicket),ST(ServiceTicket)存放在cas服务端中。要实现上图的分布式部署,将其存入共用的数据库即可。

单点登录实现方案

单点登录概述

单点登录,即用户只登录一次,在其随后访问所有的授权的资源时,都不需要再次登录。本方案使用CAS产品为基础来实现。

CAS(CentralAuthenticationService)是Yale大学发起的一个开源项目,据统计,大概每10个采用开源构建WebSSO的Java项目,就有8个使用CAS。下方主要介绍CAS结构体系、协议与安全性。

CAS结构体系

从结构体系看,CAS包含两部分:

1)CASServer

CASServer负责完成对用户的认证工作,CASServer需要独立部署。

CASServer会处理用户名/密码等凭证(Credentials),可通过连接到LADP检索用户名密码信息,也可能在XML文件中检索用户密码,对这种方式,CAS均提供一种灵活但统一的接口/实现分离的方式,CAS究竟是用何种认证方式,跟CAS协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展。

2)CASClient

CASClient负责部署在客户端(注意,我是指Web应用),原则上,CASClient的部署意味着,当有对本地Web应用的受保护资源的访问请求,并且需要对请求方进行身份认证,Web应用不再接受任何的用户名密码等类似的Credentials,而是重定向到CASServer进行认证。

CAS协议

1)基础协议

CAS基础模式

上图是一个最基础的CAS协议,CASClient以Filter方式保护Web应用的受保护资源,过滤从客户端过来的每一个Web请求,同时,CASClient会分析HTTP请求中是否包请求ServiceTicket(上图中的Ticket),如果没有,则说明该用户是没有经过认证的,于是,CASClient会重定向用户请求到CASServer(Step2)。Step3是用户认证过程,如果用户提供了正确的Credentials,CASServer会产生一个随机的ServiceTicket,然后,缓存该Ticket,并且重定向用户到CASClient(附带刚才产生的ServiceTicket),ServiceTicket是不可以伪造的,最后,Step5和Step6是CASClient和CASServer之间完成了一个对用户的身份核实,用Ticket查到Username,因为Ticket是CASServer产生的,因此,所以CASServer的判断是毋庸置疑的。

该协议完成了一个很简单的任务,就是User(ah.zhangsan)打开IE,直接访问某一应用A,它被立即重定向到CASServer进行认证,User可能感觉到浏览器在应用A和casserver之间重定向,但User是看不到,CASClient和CASServer相互间的ServiceTicket核实(Validation)过程。当CASServer告知CASClient用户ServiceTicket对应确凿身份,CASClient才会对当前Request的用户进行服务。

2)CAS如何实现SSO

CAS可以很简单的实现跨域的SSO,因为,单点被控制在CASServer,用户最有价值的TGC-Cookie只是跟CASServer相关,CASServer就只有一个,因此,解决了cookies不能跨域的问题。

1.如果User的持有TGC且其还没失效,那么就进行基础协议图的Step4,达到了SSO的效果。

2.如果TGC失效,那么用户还是要重新认证进行基础协议图的Step3。

CAS安全性

CAS的安全性是一个非常重要的Topic。CAS从v1到v3,都很依赖于SSL,它假定了这样一个事实,用户在一个非常不安全的网络环境中使用SSO,Hacker的Sniffer会很容易抓住所有的HttpTraffic,包括通过Http传送的密码甚至Ticket票据。

2.3.1TGC/PGT安全性

对于一个CAS用户来说,最重要是要保护它的TGC,如果TGC不慎被CASServer以外的实体获得,Hacker能够找到该TGC,然后冒充CAS用户访问所有授权资源。

SSO的安全性问题比普通应用的安全性还要严重,因为SSO存在一种门槛效应。以前即使Hacker能够截获用户在Web应用A的密码,它也未必能知道用户在Web应用B的密码,但SSO让Hacker只需要截获TGC(突破了门槛),即能访问所有与该用户相关的所有应用系统。

PGT跟TGC的角色是一样的,如果被Hacker获得,后果可想而知。

从基础模式可以看出,TGC是CASServer通过SSL方式发送给终端用户,因此,要截取TGC难度非常大,从而确保CAS的安全性。所以CAS的传输安全性依赖于SSL。

2.3.2ServiceTicket/ProxyTicket安全性

ServiceTicket是通过Http传送的,意味着所网络中的其他人可以Sniffer到其他人的Ticket。

CAS协议从几个方面让ServiceTicket变得更加安全。

·ServiceTicket只能使用一次

CAS协议规定,无论ServiceTicket验证是否成功,CASServer都会将服务端的缓存中清除该Ticket,从而可以确保一个ServiceTicket不被使用两次。

·ServiceTicket在一段时间内失效。

假设用户拿到ServiceTicket之后,他请求helloservice的过程又被中断了,ServiceTicket就被空置了,事实上,此时,ServiceTicket仍然有效。CAS规定ServiceTicket只能存活一定的时间,然后CASServer会让它失效。通过在web.xml中配置下面的参数,可以让ServiceTicket在多少秒内失效。该参数在业务应用的条件范围内,越小越安全。

·ServiceTicket是基于随机数生成的

ServiceTicket必须足够随机,如果ServiceTicket生成规则被猜出(如果你使用了ST+Helloservice+自增序列的方式,Hacker就可以构造下一个Ticket),Hacker就等于绕过CAS认证,直接访问所有服务。

CAS客户端配置

单点登录客户端集成,主要也就是配置了四个过滤器,和一个监听器。并且我们需要将用户信息和各个子系统进行同步。同时单点登录服务端配置了SSL,需要各个子系统导入证书到JDK中。

证书

证书文件:casserver.cer

导入证书

方式一:

keytool-import-trustcacerts-aliascasserver-fileE:\Cas-SSO\ssl\casserver.cer-keystore%JAVA_HOME%\jre\lib\security\cacerts

导入证书到jdk,输入确认命令的时候,是y不是yes

方式二:

keytool-import-aliascasserver-fileE:\Cas-SSO\ssl\casserver.cer-keystore%JAVA_HOME%\jre\lib\security\cacerts-storepasschangeit-trustcacerts

:-file指定证书的位置,也就是上一步导出证书的位置,命令中指定了JAVA_HOME,意思是将证书导入到客户端证书库,也就是jdk证书库中.因为客户端应用运行在本地,需要jdk的支持。回车之后,会让你输入密钥库口令,注意,这里的密码必须要输入changeit(jdk密码),不能输入上面指定的密码,切记,否则导入客户端证书会有问题,如果是多台机器演示,需要在每一台客户端导入该证书,步骤都是一样的。当看到提示是否信任此证书,输入y回车即可,见下图:(说明,命令中的-alias后面的别名可以自定义,如果出现的错误,该意思是说客户端的密钥库中已经存在该别名证书了,重新指定其他别名即可.)

证书查看

#查看证书信息

keytool-list-keystoreE:\Cas-SSO\ssl\cas

#查看jdk目录下的证书

keytool-list-keystore%JAVA_HOME%\jre\lib\security\cacerts

findstr/icasserver

keytool-list-keystore%JAVA_HOME%\jre\lib\security\cacerts-aliascasserver

配置hosts

环境准备

·jdk1.8

·apache-tomcat-8.5.15

·cas-client-core-3.4.0.jar、

1
查看完整版本: 用户统一认证SSO解决方案CAS