CAS单点登陆配置手册.doc

上传人:仙人指路1688 文档编号:2396987 上传时间:2023-02-17 格式:DOC 页数:22 大小:366.50KB
返回 下载 相关 举报
CAS单点登陆配置手册.doc_第1页
第1页 / 共22页
CAS单点登陆配置手册.doc_第2页
第2页 / 共22页
CAS单点登陆配置手册.doc_第3页
第3页 / 共22页
CAS单点登陆配置手册.doc_第4页
第4页 / 共22页
CAS单点登陆配置手册.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《CAS单点登陆配置手册.doc》由会员分享,可在线阅读,更多相关《CAS单点登陆配置手册.doc(22页珍藏版)》请在三一办公上搜索。

1、CAS单点登陆配置手册1、Yale CAS简介CAS 是 Yale (耶鲁)大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:开源的企业级单点登录解决方案。 CAS Server 为需要独立部署的 Web 应用。 CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。2、CAS 原理和协议从结构上看,CAS 包含两个部分: CAS Server 和

2、 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图1 是 CAS 最基本的协议过程:图 1. CAS 基础协议CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (

3、也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和

4、TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。3、CAS服务端配置1准备环境JDK1.6apache-tomcat-6.0.14cas-server-3.4.22配置server将cas-server war文件复制到webapps下,启动tomcat,以相同用户名或密登录成功。3配置数据库访问方式复制modules下面所有jar文件到cas-server的Web-inf/lib下,并复制class12.jar(oracle数据库驱动)。修改配置数据源,在deployerCon

5、figContext.xml中添加数据源。 oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:localhost:1521:orcl aip aip 修改登录验证方法,在deployerConfigContext.xml中注释原验证方式,改为数据库验证。重新启动,通过数据库验证用户成功.三种验证方法:相同用户名或密码用select语句验证指定表或字段 MD5加密配置,在deployerConfigContext.xml中添加加密算法 在用户验证中加入4设置cas登录成功进入页面修改webappscasWEB-INFviewjspdefaultui

6、casGenericSuccess.jsp页面,重定向到Aip系统protal页面.5CAS 服务端超时配置修改cas server下WEB-INFsping-configurationapplicationContext.xml,6CAS取消HTTPS验证配置6.1 修改cas server下WEB-INFdeployerConfigContext.xml文件增加参数p:requireSecure=false,是否需要安全验证,即HTTPS,false为不采用。6.2修改cas server下WEB-INFspring-configurationticketGrantingTicketCoo

7、kieGenerator.xml文件Defines the cookie that stores the TicketGrantingTicket. You most likely should never modify these (especially the secure property).You can change the name if you want to make it harder for people to guess.参数p:cookieSecure=true,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。参数p:c

8、ookieMaxAge=-1,简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。6.3修改cas server下WEB-INFspring-configurationwarnCookieGenerator.xml文件两个参数与上面同理。7CAS安全性设置TGC存活周期设置修改WEB-INFspring-configurationticketExpirationPolicies.xml文件,通过TimeoutExpira

9、tionPolicy来设置CAS TGC存活周期参数,参数默认是120分钟,在合适的范围内设置最小值,太短,会影响SSO体验,太长,会增加安全性风险。Service Ticket有效设置通过在 web.xml 中设置下面的参数,能让 Service Ticket 在多少秒内失效。 edu.yale.its.tp.cas.serviceTimeout 300 该参数在业务应用的条件范围内,越小越安全。 4、CAS服务端扩展1扩展认证接口CAS Server 负责完成对用户的认证工作,它会处理登录时的用户凭证 (Credentials) 信息,用户名/密码对是最常见的凭证信息。CAS Server

10、 可能需要到数据库检索一条用户帐号信息,也可能在 XML 文件中检索用户名/密码,还可能通过 LDAP Server 获取等,在这种情况下,CAS 提供了一种灵活但统一的接口和实现分离的方式,实际使用中 CAS 采用哪种方式认证是与 CAS 的基本协议分离开的,用户可以根据认证的接口去定制和扩展。扩展 AuthenticationHandler CAS 提供扩展认证的核心是 AuthenticationHandler 接口,该接口定义如清单 1 下:清单 1. AuthenticationHandler定义 public interface AuthenticationHandler /* *

11、 Method to determine if the credentials supplied are valid. * param credentials The credentials to validate. * return true if valid, return false otherwise. * throws AuthenticationException An AuthenticationException can contain * details about why a particular authentication request failed. */ bool

12、ean authenticate(Credentials credentials) throws AuthenticationException; /* * Method to check if the handler knows how to handle the credentials * provided. It may be a simple check of the Credentials class or something * more complicated such as scanning the information contained in the * Credenti

13、als object. * param credentials The credentials to check. * return true if the handler supports the Credentials, false othewrise. */ boolean supports(Credentials credentials); 该接口定义了 2 个需要实现的方法,supports ()方法用于检查所给的包含认证信息的Credentials 是否受当前 AuthenticationHandler 支持;而 authenticate() 方法则担当验证认证信息的任务,这也是需

14、要扩展的主要方法,根据情况与存储合法认证信息的介质进行交互,返回 boolean 类型的值,true 表示验证通过,false 表示验证失败。CAS3中还提供了对AuthenticationHandler 接口的一些抽象实现,比如,可能需要在执行authenticate() 方法前后执行某些其他操作,那么可以让自己的认证类扩展自清单 2 中的抽象类:清单 2. AbstractPreAndPostProcessingAuthenticationHandler定义 public abstract class AbstractPreAndPostProcessingAuthenticationHa

15、ndler implements AuthenticateHandler protected Log log = LogFactory.getLog(this.getClass(); protected boolean preAuthenticate(final Credentials credentials) return true; protected boolean postAuthenticate(final Credentials credentials, final boolean authenticated) return authenticated; public final

16、boolean authenticate(final Credentials credentials) throws AuthenticationException if (!preAuthenticate(credentials) return false; final boolean authenticated = doAuthentication(credentials); return postAuthenticate(credentials, authenticated); protected abstract boolean doAuthentication(final Crede

17、ntials credentials) throws AuthenticationException; AbstractPreAndPostProcessingAuthenticationHandler 类新定义了 preAuthenticate() 方法和 postAuthenticate() 方法,而实际的认证工作交由 doAuthentication() 方法来执行。因此,如果需要在认证前后执行一些额外的操作,可以分别扩展 preAuthenticate()和 ppstAuthenticate() 方法,而 doAuthentication() 取代 authenticate() 成为了

18、子类必须要实现的方法。由于实际运用中,最常用的是用户名和密码方式的认证,CAS3 提供了针对该方式的实现,如清单 3 所示:清单 3. AbstractUsernamePasswordAuthenticationHandler 定义 public abstract class AbstractUsernamePasswordAuthenticationHandler extends AbstractPreAndPostProcessingAuthenticationHandler . protected final boolean doAuthentication(final Credenti

19、als credentials) throws AuthenticationException return authenticateUsernamePasswordInternal(UsernamePasswordCredentials) credentials); protected abstract boolean authenticateUsernamePasswordInternal( final UsernamePasswordCredentials credentials) throws AuthenticationException; protected final Passw

20、ordEncoder getPasswordEncoder() return this.passwordEncoder; public final void setPasswordEncoder(final PasswordEncoder passwordEncoder) this.passwordEncoder = passwordEncoder; . 基于用户名密码的认证方式可直接扩展自 AbstractUsernamePasswordAuthenticationHandler,验证用户名密码的具体操作通过实现 authenticateUsernamePasswordInternal()

21、方法达到,另外,通常情况下密码会是加密过的,setPasswordEncoder() 方法就是用于指定适当的加密器。从以上清单中可以看到,doAuthentication() 方法的参数是 Credentials 类型,这是包含用户认证信息的一个接口,对于用户名密码类型的认证信息,可以直接使用 UsernamePasswordCredentials,如果需要扩展其他类型的认证信息,需要实现Credentials接口,并且实现相应的 CredentialsToPrincipalResolver 接口,其具体方法可以借鉴 UsernamePasswordCredentials 和 Username

22、PasswordCredentialsToPrincipalResolver。2扩展JDBC认证方法用户的认证信息通常保存在数据库中,因此本文就选用这种情况来介绍。将前面下载的 cas-server-3.1.1-release.zip 包解开后,在 modules 目录下可以找到包 cas-server-support-jdbc-3.1.1.jar,其提供了通过 JDBC 连接数据库进行验证的缺省实现,基于该包的支持,我们只需要做一些配置工作即可实现 JDBC 认证。JDBC 认证方法支持多种数据库,DB2, Oracle, MySql, Microsoft SQL Server 等均可,这里

23、以 DB2 作为例子介绍。并且假设Oracle数据库名: orcl,数据库登录用户名: wuxi,数据库登录密码: wuxi,用户信息表为: UIM_USER,该表包含用户名和密码的两个数据项分别为 USERID 和 PWD。1). 配置 DataStore 打开文件 %CATALINA_HOME%/webapps/casServer/WEB-INF/deployerConfigContext.xml,添加一个新的 bean 标签,对于 Oracle,内容如清单 4 所示:清单 4. 配置 DataStore oracle.jdbc.driver.OracleDriver jdbc:oracl

24、e:thin:192.168.0.175:1521:orcl wuxi wuxi 其中 id 属性为该 DataStore 的标识,在后面配置 AuthenticationHandler 会被引用,另外,需要提供 DataStore 所必需的数据库驱动程序、连接地址、数据库登录用户名以及登录密码。2). 配置 AuthenticationHandler 在 cas-server-support-jdbc-3.1.1.jar 包中,提供了 3 个基于 JDBC 的 AuthenticationHandler,分别为 BindModeSearchDatabaseAuthenticationHand

25、ler, QueryDatabaseAuthenticationHandler, SearchModeSearchDatabaseAuthenticationHandler。其中 BindModeSearchDatabaseAuthenticationHandler 是用所给的用户名和密码去建立数据库连接,根据连接建立是否成功来判断验证成功与否;QueryDatabaseAuthenticationHandler 通过配置一个 SQL 语句查出密码,与所给密码匹配;SearchModeSearchDatabaseAuthenticationHandler 通过配置存放用户验证信息的表、用户名字

26、段和密码字段,构造查询语句来验证。使用哪个 AuthenticationHandler,需要在 deployerConfigContext.xml 中设置,默认情况下,CAS 使用一个简单的 username=password 的 AuthenticationHandler,在文件中可以找到如下一行:,我们可以将其注释掉,换成我们希望的一个 AuthenticationHandler,比如,使用QueryDatabaseAuthenticationHandler 或 SearchModeSearchDatabaseAuthenticationHandler 可以分别选取清单 5 或清单 6 的

27、配置。清单 5. 使用 QueryDatabaseAuthenticationHandler 清单 6. 使用 SearchModeSearchDatabaseAuthenticationHandler UIM_USER USERID PWD 另外,由于存放在数据库中的密码通常是加密过的,所以 AuthenticationHandler 在匹配时需要知道使用的加密方法,在 deployerConfigContext.xml 文件中我们可以为具体的 AuthenticationHandler 类配置一个 property,指定加密器类,比如对于 QueryDatabaseAuthenticati

28、onHandler,可以修改如清单7所示:清单 7. 添加 passwordEncoder 其中 myPasswordEncoder 是对清单 8 中设置的实际加密器类的引用:清单 8. 指定具体加密器类 这里 MyPasswordEncoder 是根据实际情况自己定义的加密器,实现 PasswordEncoder 接口及其 encode() 方法。3). 部署依赖包 在以上配置完成以后,需要拷贝几个依赖的包到 casServer应用下,包括:将 cas-server-support-jdbc-3.1.1.jar 拷贝到 %CATALINA_HOME%/webapps/casServer/ W

29、EB-INF/lib 目录。 数据库驱动ojdbc14.jar拷贝到 %CATALINA_HOME%/webapps/casServer/WEB-INF/lib 目录。对于其他数据库,同样将相应数据库驱动程序拷贝到该目录。 DataStore 依赖于 commons-collections-3.2.jar, commons-dbcp-1.2.1.jar, commons-pool-1.3.jar,需要到 apache 网站的 Commons 项目下载以上 3 个包放进 %CATALINA_HOME%/webapps/casServer/WEB-INF/lib 目录。 扩展 CAS Server

30、 界面CAS 提供了 2 套默认的页面,分别为“ default ”和“ simple ”,分别在目录“casServer /WEB-INF/view/jsp/default ”和“casServer/WEB-INF/view/jsp/simple ”下。其中 default 是一个稍微复杂一些的页面,使用 CSS,而 simple 则是能让 CAS 正常工作的最简化的页面。在部署 CAS 之前,我们可能需要定制一套新的 CAS Server 页面,添加一些个性化的内容。最简单的方法就是拷贝一份 default 或 simple 文件到“ casServer/WEB-INF/view/jsp

31、”目录下,比如命名为 newUI,接下来是实现和修改必要的页面,有 4 个页面是必须的:casConfirmView.jsp: 当用户选择了“ warn ”时会看到的确认界面 casGenericSuccess.jsp: 在用户成功通过认证而没有目的Service时会看到的界面 casLoginView.jsp: 当需要用户提供认证信息时会出现的界面 casLogoutView.jsp: 当用户结束 CAS 单点登录系统会话时出现的界面 CAS 的页面采用 Spring 框架编写,对于不熟悉 Spring 的使用者,在修改之前需要熟悉该框架。页面定制完过后,还需要做一些配置从而让 CAS 找到新的页面,拷贝“casServer

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号