CAS 讲义.docx
- 文档编号:6134149
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:18
- 大小:104.48KB
CAS 讲义.docx
《CAS 讲义.docx》由会员分享,可在线阅读,更多相关《CAS 讲义.docx(18页珍藏版)》请在冰点文库上搜索。
CAS讲义
一.SSO(SingleSign-on)原理
SSO分为Web-SSO和桌面SSO。
桌面SSO体现在操作系统级别上。
Web-SSO体现在客户端,主要特点是:
SSO应用之间使用Web协议(如HTTPS),并且只有一个登录入口。
我们所讲的SSO,指WebSSO。
SSO的体系中,有下面三种角色:
✧User(多个)
✧Web应用(多个)
✧SSO认证中心(一个)
SSO实现模式千奇百怪,但万变不离其宗,包含以下三个原则:
●所有的登录都在SSO认证中心进行。
●SSO认证中心通过一些方法来告诉Web应用当前访问用户究竟是不是通过认证的用户。
●SSO认证中心和所有的Web应用建立一种信任关系。
二.CAS的基本原理
CAS(CentralAuthenticationService)是Yale大学发起的构建WebSSO的Java开源项目。
1.CAS的结构体系
◆CASServer
CASServer负责完成对用户信息的认证,需要单独部署,CASServer会处理用户名/密码等凭证(Credentials)。
◆CASClient
CASClient部署在客户端,当有对本地Web应用受保护资源的访问请求,并且需要对请求方进行身份认证,重定向到CASServer进行认证。
2.CAS协议
基础协议
上图是一个基础的CAS协议,CASClient以过滤器的方式保护Web应用的受保护资源,过滤从客户端过来的每一个Web请求,同时,CASClient会分析HTTP请求中是否包请求ServiceTicket(上图中的Ticket),如果没有,则说明该用户是没有经过认证的,CASClient会重定向用户请求到CASServer(Step2)。
Step3是用户认证过程,如果用户提供了正确的认证信息,CASServer会产生一个随机的ServiceTicket,会向User发送一个Ticketgrantingcookie(TGC)给User的浏览器,并且重定向用户到CASClient(附带刚才产生的ServiceTicket),Step5和Step6是CASClient和CASServer之间完成了一个对用户的身份核实,用Ticket查到Username,认证通过。
3.CAS如何实现SSO
当用户访问Helloservice2再次被重定向到CASServer的时候,CASServer会主动获到这个TGCcookie,然后做下面的事情:
1)如果User的持有TGC且其还没失效,那么就走基础协议图的Step4,达到了SSO的效果。
2)如果TGC失效,那么用户还是要重新认证(走基础协议图的Step3)。
三.实践配置
下面我们以tomcat5.5为例进行说明(这里,我将Server和Client同时放在了同一个Tomcat服务器下)。
软件环境:
tomcat5.5ant-1.6.5,jdk1.5.0_06
下载cas-server-3.0.4.zip和cas-client和cas-server-jdbc-3.0.5-rc2.jar和mysql5.0.16和tomcat5.5.15
http:
//www.ja-sig.org/downloads/cas/cas-server-3.0.4.ziphttp:
//www.yale.edu/tp/cas/cas-client-2.0.11.zip
http:
//developer.ja-sig.org/maven/cas/jars/cas-server-jdbc-3.0.5-rc2.jar
http:
//tomcat.apache.org/
(一)将一个或者一些页面进行支持HTTPS传输协议(意义:
对某些页面进行了安全传输)(重点掌握)
1.产生SERVER的证书库文件
keytool-genkey-aliastomcat-keyalgRSA[-keystorekeystore-file]
并将证书文件放在web容器的目录下。
2.(在server端)配置tomcat使用HTTPS
$CATALINA_HOME/conf/server.xml里
keystorePass="changeit"keystoreFile="\conf\.keystore" maxThreads="150"minSpareThreads="25"maxSpareThreads="75" enableLookups="false"disableUploadTimeout="true" acceptCount="100"scheme="https"secure="true" clientAuth="false"sslProtocol="TLS"/> 注意: keystorePass="changeit"(这个问证书库文件的密码,也就是上面配置产生的一个密码)keystoreFile="/.keystore"(这是证书库文件的存放路径,其中根目录“/”为tomcat的安装路径) 3.在WEB-INF\web.xml文件中增加 --名字随便取--> 解释: transport-guarantee元素指定了客户端和服务端的通信关系,有NONE,INTEGRAL,CONFIDENTIAL。 NONE表示着应用不需要任何传输保障。 INTEGRAL表示着在数据在客户端到服务端的过程中不能有任何改变。 CONFIDENTIAL表示在传输过程中防止其他传输内容的干扰。 在使用SSl时常用的就INTEGRAL或CONFIDENTIL。 4.进行访问测试 (二)实现CAS系统 1.产生SERVER的证书库文件 keytool-genkey-aliastomcat-keyalgRSA[-keystorekeystore-file] 并将证书文件放在web容器的目录下。 2.(在server端)配置tomcat使用HTTPS $CATALINA_HOME/conf/server.xml里 keystorePass="changeit"keystoreFile="/.keystore" maxThreads="150"minSpareThreads="25"maxSpareThreads="75" enableLookups="false"disableUploadTimeout="true" acceptCount="100"scheme="https"secure="true" clientAuth="false"sslProtocol="TLS"/> 注意: keystorePass="changeit"(这个问证书库文件的密码,也就是上面配置产生的一个密码)keystoreFile="/.keystore"(这是证书库文件的存放路径,其中根目录“/”为tomcat的安装路径) 3.将cas-server-3.0.4.zip解压,并将target/cas.war拷贝到webapps下。 4.将cas-client-2.0.11.zip解压,把cas-client-2.0.11\java\lib\casclient.jar拷贝到client服务器上(这里为同一tomcat)的书生读吧_{w"n_L;G&m0\,wg_i_F9p webapps/servlets-examples/WEB-INF/lib目录下(如果没有就建一个) 5.在要使用CAS的客户端应用里设置(以servlets-examples这个APP为例,在应用时,所有客户端均进行类似配置),我们使用ServletFilter(CASclient里提供的)来实现SSO的检查。 修改servlets-examples/WEB-INF/web.xml //your.cas.server.name: port --这里是CASserver的loginURL-->/cas/login //your.cas.server.name: port --这里是CASserver的URL验证器-->/cas/proxyValidate port --client: port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP(默认为localhost)和port(默认8080)--> 配置好的例子: //localhost: 8443/cas/login //localhost: 8443/cas/proxyValidate 8080 6.7.导出SERVER端的的证书文件(证书文件只包含公钥)书生读吧_[*S_}_{-E keytool-export-filemyserver.crt-aliasmy-alias-name-keystorekeystore-file //keytool-export-filemyserver.crt-aliastomcat-keystore.keystore///// Z0ts)`o0书生读吧_v_w_l;T_U9Q&[J2D`"Sa 在客户端的JVM里的证书库cacerts中导入信任的SERVER的证书(根据情况有可能需要管理员权限) 8y't*^! O1Y 7.s0keytool-import-keystorecacerts-filemyserver.crt-aliashostname(别名) 然后将cacerts复制到%JAVA_HOME%/jre/lib/security/目录下 //keytool-import-keystorecacerts-filemyserver.crt-aliastomcat书生读吧~_n^*D_y0tF! I_| 书生读吧_m_Z4c_G@5E)R_Z/in 测试.书生读吧! L_m_A_t A_Ba(r_n 把server和client分别起来(这里为同一个Tomcat,实际应用时可以在多个服务器上,且client可以为多个应用),检查启动的LOG是否正常,如果一切OK,就访问 8.Q*R: N_u.^_]5r"J_Y_i_o9x0http: //localhost: 8080/servlets-examples/servlet/HelloWorldExample _k7YBe: z: _g0系统会自动跳转到一个验证页面,随便输入一个相同的账号,密码,验正通过之后就会访问 _Th1|8Y_k_a$G6qk0到真正的HelloWorldExample这个servlet了 四.结合实际的环境的扩展 1多个web应用如何实现单点登陆 (! ――大家思考一下: 如果我想在配置一个客户端,需要什么步骤? ) 下面以jsp-examples为例子,进行下面得阐述: (1)在\webapps\jsp-examples\WEB-INF\web.xml文件中进行配置: edu.yale.its.tp.cas.client.filter.CASFilter edu.yale.its.tp.cas.client.filter.loginUrl //localhost: 8443/cas/login edu.yale.its.tp.cas.client.filter.validateUrl https: //localhost: 8443/cas/proxyValidate edu.yale.its.tp.cas.client.filter.serverName 8080 (2)在webapps\jsp-examples\WEB-INF\lib增加引用得jar包,casclient.jar。 2认证业务方法的扩展: 2.1.1配置CAS使用数据库进行验证 在MySql中的Test库中新建user表 Create TABLE `app_user` ( `username` varchar(30) NOT NULL default '', `password` varchar(45) NOT NULL default '', PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 添加以下用户: Insert INTO `app_user` (`username`,`password`) VALUES ('test','test'), ('test1','test1'); 2.1.2 修改cas项目中的deployerConfigContext.xml文件 注释掉该行,在其下加入: " /> 并添加一个bean: mysql: //localhost: 3306/test 2.1.3拷贝cas-server-jdbc-3.0.6.jar和mysql-connector-java-3.1.11-bin.jar到webapps/cas/WEB-INF/lib下。 3如何在这取得用户名称 <%@pagecontentType="text/html;charset=GBK"%> <% Stringusername=(String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); %> 当前得登陆用户: <%=username%> <% username=(String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); %> 4登陆页面的扩展: (1)现在CAS系统中存在的两套登陆页面{project.home}/webapp/WEB-INF/view/jsp/default/ui/和{project.home}/webapp/WEB-INF/view/jsp/simple/ui (2){project.home}/webapp/WEB-INF/cas-servlet.xml id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> name="basename" value="simple_views"/> name="order" value="0"/> 这个bean中basename属性决定由哪个属性文件加载,simple_views.properties还是default_views.Properties 而属性文件: {project.home}/webapp/WEB-INF/classes/default_views.properties {project.home}/webapp/WEB-INF/classes/simple_views.properties ###Loginview(/login) casLoginView.(class)=org.springframework.web.servlet.view.JstlView casLoginView.url=/WEB-INF/view/jsp/default/ui/casLoginView.jsp (
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAS 讲义