读书人

cas+tomcat开发单点登录课程(定制认证

发布时间: 2012-07-18 12:05:40 作者: rapoo

cas+tomcat开发单点登录教程(定制认证方式篇)

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。如附件“cas原理.jpg”所示。

CAS Client 与受保护的应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定的 CAS Server 登录地址,并传递要访问的目的资源地址,以便登录成功过后重定向到该地址。用户在输入认证信息后,如果登录成功,CAS Server 随机产生一个 Service Ticket,并缓存该Service Ticket以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。

?

以下内容基于CAS Client与CAS Server的交互采用SSL协议。

?

1.环境:JDK1.6+Tomcat6.0.32+cas-Server3.4.31+cas-Client3.1.12

?

2.利用JDK的keytool生成证书

?

在生产环境中,证书需要到证书提供商处购买。

正确设置%JAVA_HOME%,在DOS窗口下运行以下命令:keytool -genkey -alias wsria -keyalg RSA -keystore E:/sso/keys/dcssokey 如附件“生成证书截图.jpg”所示。这样在 E:/sso/keys目录下就会生成dcssokey的文件。

?

3.设置域名

cas建议用域名访问而不用IP地址访问,所以要设置一下域名,在C:\Windows\System32\drivers\etc下修改hosts文件,加入:(IP)10.5.227.125sso.unifyaa.com(不要用127.0.0.1)

?

4.导出证书

利用keytool命令导出证书,如附件“导出证书.jpg”所示。这样在 E:/sso/keys目录下就会生成dcsso.crt的文件。

?

5.为JVM导入证书

利用keytool名利为JVM导入证书,导入之前先确定%JAVA_HOME%\jre\lib\security目录下是否存在cacerts的文件,如果存在则删除该文件,利用keytool命令为JVM导入证书,如附件“JVM导入证书.jpg”所示。

?

6.web服务器应用证书

?

修改%TOMCCAT_HOME%/conf/server.xml文件,

? <!-- 启用HTTPS协议 -->

? ? <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

? ? ? ? ? ? ? ?maxThreads="150" scheme="https" secure="true"

? ? ? ? ? ? ? ?clientAuth="false" sslProtocol="TLS"

? ? ? keystoreFile="E:/sso/keys/dcssokey" keystorePass="dcfs00"

? ? ? truststoreFile="D:/ProgramFiles/Java/jdk1.6.0_25/jre/lib/security/cacerts" />

启动tomcat,在浏览器输入地址:https://sso.unify.com:8443 就会提示证书安全问题,点击“继续浏览”就可进入tomcat目录。

?

7.部署CAS Server应用

?

解压下载的cas-server-3.4.3.1.zip包,在cas-server-3.4.3.1\modules目录下找到cas-server-webapp-3.4.3.1.war文件,把该文件拷贝至%TOMCAT_HOME%\webapps下,并改名为cas.war,

重启tomcat,在浏览器输入https://sso.unifyaa.com:8443/cas/login 弹出cas的登录界面,如附件“cas登录界面.jpg”所示。

在登录界面输入admin/admin,登录成功,如附件“cas登录成功界面.jpg”所示。

注:在CAS Server中,默认使用org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler类作登录身份认证处理,这个不适用生产环境,我们需要使用定制化的AuthenticationHandler。

?

8.定制CAS Server的用户身份认证接口

CAS 提供扩展认证的核心是 AuthenticationHandler 接口。CAS还提供了AuthenticationHandler?接口的一些抽象实现,以满足我们的复杂应用,如:AbstractPreAndPostProcessingAuthenticationHandler,可在身份认证前后做一些操作。对于最常用的用户名/密码认证方式,CAS也提供了支持,由类AbstractUsernamePasswordAuthenticationHandler提供支持。

通常用户信息一般都存在于数据库,我们通过JDBC的方式来验证用户信息。CAS提供了通过JDBC连接数据库认证用户的默认实现,需要/cas-server-3.4.3.1/modules/cas-server-support-jdbc-3.4.3.1.jar包的支持。把该包

copy到tomcat的webapps下的cas.war的WEB-INF/lib下。

增加dataSource。在tomcat的/webapps/cas/WEB-INF/deployerConfigContext.xml添加以下内容:

?

?

?以上用的是c3p0作为dataSource的实现,dataSource的作用大家都比较清楚,这里就不做解释了。

在tomcat的\webapps\cas\WEB-INF目录下新建两个文件,分别是jdbc.properties和c3p0.properties,内容如下:

jdbc.properties

?

?

?添加以下内容:

?

?

我们可以使用QueryDatabaseAuthenticationHandler,也可以使用SearchModeSearchDatabaseAuthenticationHandler,使用SearchModeSearchDatabaseAuthenticationHandler的配置如下:

?

?

?由于我们的密码一般都是经过加密的,所以在认证信息的时候需要对用户提交的密码进行加密,CAS提供了MD5加密的默认实现,配置如下:

?

?然后在mysql数据库中新建一张表:loginUsers,字段为loginname和password,并新增一条记录,启动tomcat,在浏览器输入https://sso.unify.com:8443/cas/login,会提示证书错误,点击继续浏览就可以了,在登录界面输入新建记录的用户名和密码,就可以登录成功了。

?

附:

若CAS Server与CAS Client的交互不想使用SSL协议,则注释掉%TOMCAT_HOME%\conf\server.xml文件中的这段内容:

?在%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml文件中找到如下内容:

?在/>前加上如下内容:p:requireSecure="false",表示不需要安全协议。

接着在%TOMCAT_HOME%\webapps\cas\WEB-INF\spring-configuration目录下修改ticketGrantingTicketCookieGenerator.xml文件,修改后的内容如下:

?p:cookieSecure="false",表示cookie也不需要安全协议,p:cookieMaxAge设置cookie的有效时长。

重启tomcat,在浏览器输入http://sso.unifyaa.com:8080/cas/login 就可以访问了。

读书人网 >开源软件

热点推荐