环境:redhat5.0 enterprise
tomcat
5.5
mysql-5.0.22-2.1.0.1
单点登录系统简介,这是引用别人的原话,原文地址是http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html
CAS 介绍
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG
的一个项目。CAS 具有以下特点:
- 开源的企业级单点登录解决方案。
- CAS Server 为需要独立部署的 Web 应用。
- CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache,
uPortal, Ruby 等。
CAS 原理和协议
从 结构上看,CAS 包含两个部分: CAS Server 和 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 步中输入认证信息,如果登录成功,CAS Server
随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service
所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket
过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS
Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。
另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS
官方网站上的相关文档。
首先下载CAS server和client
到 CAS 官方网站下载 CAS Server 和 Client,地址分别为:
http://www.jasig.org/cas/downloadhttp://www.ja-sig.org/downloads/cas-clients
我下载的是cas-client-java-3.0.0.zip和cas-server-3.3.1-release.tar.gz这两个包。
由于CAS认证是基于SSL协议的,所以我们先安装SSL证书。(注,下面命令中黄色的字体代表用户自己设置的值)
$JAVA_HOME/bin/keytool -genkey -alias tomcat
-keyalg RSA -keystore "/usr/local/tomcat/server.keystore"
接下来会让你设置密码,然后注意填写姓名的时候填写localhost,这是考虑到后面连接数据库。然后后面随便写。
然后导出证书
$JAVA_HOME/bin/keytool -export -alias tomcat -file
server.cert -keystore "/usr/local/tomcat/server.keystore"
然后导入到我们的授权证书中
$JAVA_HOME/bin/keytool -import -trustcacerts -file server.cert -keystore $JAVA_HOME/jre/lib/security/cacerts
(注,这时输入默认的密码:changeit)
这时证书就安装完毕了。
下面修改配置文件,首先修改tomcat/conf/server.xml,找到下面这段关于SSL的语句
<Connector port="8443"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100" scheme="https"
secure="true"
clientAuth="false" sslProtocol="TLS"
/>
把这段话的注释去掉,并在里面加上keystoreFile="/usr/local/tomcat/server.keystore" keystorePass="123456"这两句,这是定义你自己的设置的keystore路径和密钥的密码。如果你使用默认的,(keystore
放在tomcat下,keystorePass为changeit)那么不用加这两句话。
接下来解压下载的CAS-server文件包cas-server-3.3.1-release.tar.gz,把其中的moudules中的cas-server-webapp-3.3.1.war复制到tomcat/webapps目录下,并且改名为cas.war,这个文件会自动解压生成个cas的目录
,到这里,由于已经布置好了SSL协议,可以检验一下SSL是否成功了,重启tomcat,然后打开浏览器输入https://localhost:8443/cas
如果能出现正常的 CAS 登录页面,则说明 CAS Server 已经部署成功。
下面是关键的一步:扩展认证接口
CAS 提供扩展认证的核心是 AuthenticationHandler 接口,这里要看详细的介绍还是去http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html,或者CAS的官网www.jasig.org/cas。
我使用的是通过JDBC认证
这里要连接数据库,通过将用户输入的用户名和密码,和数据库中的数据对照,如果数据库中存在,那么通过,如果没有,那么认证失败,用户不能登录。
具体做法如下:
首先在数据库中添加一个用户casserver,密码是casserver。然后添加database cas,添加个一个tables
app_user,并赋值给他。
mysql> create databases cas;
mysql> use cas;
mysql> create table app_user (username varchar(30) not null
default'', password varchar(45) not null default'', primary key
(username));
mysql> insert into app_user (username,password) values
('test01','psw01'),('test02','psw02');找
到刚才解压到tomcat/webapps的那个cas包,修改在cas/WEB-INF/目录下的deployerConfigContext.xml
文件。找到这段话<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
由于我使用的是mysql数据库,因此在后面添加
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property
name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://192.168.2.137:3306/cas</value></property>
<property name="username"><value>casserver</value></property>
<property name="password"><value>casserver</value></property>
</bean>
再找到这段话
<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"
/>
将它注释掉,在其下面放入我们的认证方式
<bean
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from app_user where username=?"
/>
<property name="dataSource" ref="dataSource"
/>
</bean>
接下来,要实现功能,还得要添加一些必要的模块驱动,如mysql.jar等,总共七个文件,我是全部放进去了:
spring-jdbc.jar
commons-dbcp-1.2.2.jar
mysql.jar
commons-collections-3.2.1.jar
mysql-connector-java-3.1.11-bin.jar
cas-server-support-jdbc-3.3.1.jar
commons-pool-1.3.jar
将他们全都拷贝到tomcat/webapps/cas/WEB-INF/lib。
到这里就OK了,这时再重启tomcat,打开
https://localhost:8443/cas会发现如果输入的用户名和密码和数据库中的不一致,认证就不能通过。这表明数据库认证已经起作用了。
注:以上命令在写此文时均再次执行过,都顺利通过。
二、部署CAS客户端
<!-- 一、安装SSL
这里拿客户端机器B来做,首先客户端自己也要安装SSL协议。步骤和服务器版本的一样。在tomcat/conf/server.xml中,找到
<Connector port="8443"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100" scheme="https"
secure="true"
clientAuth="false" sslProtocol="TLS"
/>
把这段话的注释去掉,并在里面加上keystoreFile="/usr/local/tomcat/client.keystore"
keystorePass="changeit",这个看你自己高兴设置密码了。
接下来,依次:
#$JAVA_HOME/bin/keytool -genkey -alias client -keyalg RSA
-keystore /usr/local/tomcat/client.keystore
#$JAVA_HOME/bin/keytool -export -alias client -file
client.cert -keystore /usr/local/tocmat/client.keystore
#$JAVA_HOME/bin/keytool -import -alias client -file
client.cert -keystore $JAVA_HOME/jre/lib/security/cacerts
-->
今天又做了一次,上面的步骤是可以省略的。。。,部署客户端可以直接从下面开始。。。
二、安装服务器证书
现在我们要和服务器端取得信任关系:
下载http://blogs.sun.com/andreas/entry/no_more_unable_to_find
的 InstallCert.java,这个文件下来后是源代码,还需执行“javac
InstallCert.java”,生成InsallCert.class,InstallCert$SavingTrustManager.class这两个文件,然后运行“ java
InstallCert compA:8443 ”命令,并且在接下来出现的询问中输入 1。这样,就将 A服务器添加到了 B 的 trust store
中。如果多个客户端应用分别部署在不同机器上,那么每个机器都需要与 CAS Server 所在机器建立信任关系。
其实,可以这样,首先建立一个空文白件,名字叫做InstallCert.java,然后复制blogs.sun.com/andreas/resource/InstallCert.java里面的内容放进去,执行“javac
InstallCert.java”,生成InsallCert.class,InstallCert$SavingTrustManager.class这两个文件,然后运行“
java InstallCert compA:8443 ”命令,并且在接下来出现的询问中输入 1。
那么进行上面这个步骤以后,会有一个jsscacerts的文件,记住:移动这个文件到$JAVA_HOME/jre/lib/security中,也就是和cacerts这个文件在同一个目录。不然会报错哦,我的另一篇文章就是记录这种错误的,里面有错误代码,有兴趣的可以对照一下。
三、编辑客户端配置文件
以tomcat/webapps/jsp-examples这个为例子吧,下载一个cas-client-2..11.zip包,解压后将cas-client-2.0.11/java/lib目录下的casclient.jar这个包复制到jsp-examples中WEB-INF/lib
下,并编辑jsp-examples/WEB-INF/web.xml文件,添加以下代码
<filter>
<filter-name>CAS
Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://domainA:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://domainA:8443/cas/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>domainB:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/protected-pattern/*</url-pattern>
</filter-mapping>
这里面domainA,domainB域名或者IP都可以,不过很多人建议域名,还没有测试这两者的差距,因为没时间再弄个域名服务器。
四、测试效果
现在打开http://domainB:8080/jsp-examples,浏览器会弹出安全提示,接受后即转到
CAS
的登录页面,填入前面你在数据库里面设定的用户名和密码,好了,页面就转到jsp-examples/index.html了。其实就是你访问这个页面中间去SERVER上验证了一下,又回头了。
分享到:
相关推荐
cas单点登录系统,带源码,可定制开发;CASServer负责完成对用户的认证工作,CASServer需要独立部署,CASServer处理用户名/密码等凭证(Credentials)验证,它可能会到数据库检索一条用户帐号信息,也可能在XML文件中...
**基于Java语言开发的CAS单点登录系统** CAS(Central Authentication Service)是一种广泛使用的开源单点登录(Single Sign-On,SSO)框架,主要由耶鲁大学开发并维护。它旨在提供一种简单、安全的方式,使得用户...
资源列表(1:cas CAS Server,2:Cas_Client_One 授权系统,3:graduationDesign 用户组织管理系统,4:CAS单点登录论文.doc,5:CAS单点登录文献综述.doc,6:基于CAS的用户管理单点登录门户系统ppt.ppt)
3. 系统集成:cas 单点登录解决方案需要与不同的应用系统集成,以便用户可以使用单点登录访问所有相互信任的应用系统。 cas 单点登录解决方案可以带来许多好处,但是也存在一些挑战和限制。例如,cas 单点登录解决...
### CAS单点登录系统知识点详解 #### 一、CAS简介 CAS(Central Authentication Service)是由耶鲁大学发起的一项开源项目,其目标在于为Web应用提供可靠且统一的单点登录解决方案。自2004年12月起,CAS成为了JA-...
总结来说,基于LDAP的CAS单点登录系统是解决多应用系统登录难题的有效工具。它结合了LDAP的用户管理优势和CAS的集中认证特性,提供了统一的用户登录体验,简化了系统管理,并为信息共享与服务提供了安全保障。对于...
总之,CAS单点登录系统提供了统一的身份验证入口,简化了用户登录过程,提高了用户体验。通过理解和实践CAS Server的配置以及客户端的集成,开发者可以有效地在自己的应用环境中实现单点登录功能。
资源列表(1:cas CAS Server,2:Cas_Client_One 授权系统,3:graduationDesign 用户组织管理系统,4:CAS单点登录论文.doc,5:CAS单点登录文献综述.doc,6:基于CAS的用户管理单点登录门户系统ppt.ppt)
CAS(Central Authentication Service,中央认证服务)是一种广泛...通过学习这些文档,你应该能够成功地配置和实施CAS单点登录系统。记住,实践是检验真理的唯一标准,理论知识结合实际操作才能更好地掌握CAS的配置。
基于Java中CAS的单点登录,有服务端的所有源码,将tomcat目录下的所有资源直接拷到Tomcat服务中间件的webapp目录下,阅读tomcat-webapp中的read.txt文档,查看使用说明,适用于第一次开发CAS单点登录的同学们,简单...
在"标题"中提到的"CAS单点登录系统,集成dubbo服务",意味着这个项目将CAS与Apache Dubbo服务进行了整合。Dubbo是一个高性能、轻量级的Java RPC框架,常用于构建分布式服务。集成CAS后,Dubbo服务可以在同一个认证...
CAS单点登录系统广泛应用于企业、学校等环境,用于统一管理多个内部系统,提高用户体验,同时简化安全管理。 综上所述,这个压缩包提供了一个完整的CAS单点登录实例,包括服务端和客户端的实现,可以帮助开发者理解...
【标题】中的“管理系统系列--cas单点登录系统”指的是一个专为IT管理设计的解决方案,其中涵盖了CAS(Central Authentication Service)单点登录系统。CAS是一种开放源代码的Web身份验证框架,它允许用户在访问多个...
CAS单点登录操作文档 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: • 开源的企业级单点登录解决...
基于用户映射的CAS单点登录系统设计与实现,校图书馆下载的资料,希望对大家有用。
在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现客户端与服务器端的交互。 1. CAS工作原理: CAS的核心思想是集中式的身份验证,用户只需在一个地方进行登录,之后访问其他已经...
CAS(Central Authentication Service)是...总之,"cas单点登录4.0"的资源对于学习和实践CAS单点登录系统非常重要。无论是部署和配置CAS服务器,还是深入研究其源代码,都能帮助我们更全面地理解和掌握单点登录技术。
总之,CAS单点登录系统为多应用环境提供了一种高效的身份验证解决方案。通过Java和PHP客户端的集成,可以在多种技术栈的项目中实现一致的用户体验,同时也简化了用户管理和权限控制。在实际应用中,应根据项目需求...