概述
1.1. Server安装
1.1.1. 下载cas并部署
下载cas-server-release,解压,从modules文件中拷贝cas-server-webapp-3.4.2.war到tomcat的webapp目录下。
1.1.2. 生成 server key
以命令行方式切换到目录%TOMCAT_HOME%,在command命令行输入如下命令:
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
(用户名输入域名,如localhost(开发或测试用)或hostname.domainname(用户拥有的域名),其它全部以 enter 跳过,最后确认,此时会在%TOMCAT_HOME%下生成server.keystore 文件。
注:参数 -validity 指证书的有效期(天),缺省有效期很短,只有90天。)
1.1.3. 将证书导入的JDK的证书信任库中
这步对于Tomcat的SSL配置不是必须,但对于CAS SSO是必须的,否则会出现如下错误:edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator。。。
导入过程分2步,第一步是导出证书,第二步是导入到证书信任库,命令如下:
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit
keytool -import -trustcacerts -alias tomcat -file server.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
如果有提示,输入Y就可以了。
其他有用keytool命令(列出信任证书库中所有已有证书,删除库中某个证书):
keytool -list -v -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts
keytool -delete -trustcacerts -alias tomcat -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts -storepass changeit
1.1.4. 配置tomcat
修改%TOMCAT_HOME%confserver.xml,以文字编辑器打开,查找这一行
<Connector port="8443" protocol="HTTP/1.1"
将该行注释去掉,并改称如下内容
Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/tools/apache-tomcat-6.0.10/server.keystore"
keystorePass="changeit"/>
1.1.5. 验证cas服务配置
地址栏输入 http://localhost:8443/cas/login.jsp,用admin:admin登录成功即可。
1.2. Examples部署
通过部署和修改tomcat webapp下的examples应用来理解cas。
1.2.1. 准备工作
将tomcat webapp下的examples应用复制成两个,jsp-examples和servlets-examples。
1.2.2. 修改web.xml
在两个应用的web.xml文件的 servlet 及 servlet-mapping中间加上如下代码:
<filter>
<filter-name>CASFilter</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://localhost:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>
edu.yale.its.tp.cas.client.filter.validateUrl
</param-name>
<param-value>
https://localhost:8443/cas/proxyValidate
</param-value>
</init-param>
<init-param>
<param-name>
edu.yale.its.tp.cas.client.filter.serverName
</param-name>
<param-value>localhost:8080</param-value>
</init-param>
<init-param>
<param-name>
edu.yale.its.tp.cas.client.filter.serverName2
</param-name>
<param-value>localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
1.2.3. 设置需要用到的cas-client库
将casclient.jar拷贝到两个应用的lib目录下。
1.2.4. 测试配置
启动tomcat,访问如下地址:
http://localhost:8080/jsp-examples/
这时,系统会提示你将要访问的是加密网站,并问你接受该网站提供的证书,点接受后,将显示CAS单点登陆页面,地址变成如下:
https://localhost:8443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2Fjsp-examples%2F
输入任意的用户名,密码和用户名相同就可以进入刚才要访问的页面。
这时再访问servlets-examples 应用下面的任一个servlet,如:
http://localhost:8080/servlets-examples/servlets/HelloWorldExample
访问后,你会发现地址栏的地址变为:
http://localhost:8080/servlets-examples/servlets/HelloWorldExample?ticket=ST-3-6EuKFN4M2aLj9cVup6sABykzheEnAnY3Zmb-20
后面增加了?ticket=ST-3-6EuKFN4M2aLj9cVup6sABykzheEnAnY3Zmb-20,这就是CAS的ticket(票据)
刚才我们其实配置了2个应用都是需要验证用户的,如果用户先访问servlets-examples应用下面的servlet,同样会提示登陆,再访问jsp-examples,也不会提示登陆了,说明我们的单点登陆配置成功。
1.3. 配置数据库认证
CAS缺省配置只是用于测试目的,实际应用中,通过数据库进行验证用户最为常见,所以,我们现在测试通过数据库验证用户。
1.3.1. 增加数据源定义
在deployerConfigContext.xml文件中增加数据源定义,如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@172.16.2.176:1521:pseccs</value>
</property>
<property name="username">
<value>pseccs</value>
</property>
<property name="password">
<value>pseccs</value>
</property>
</bean>
1.3.2. 修改用户验证方式
在deployerConfigContext.xml文件中屏蔽以下代码:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
增加数据库验证方式代码,如下所示:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select login_password from smp_user where login_name=?" />
<property name="dataSource" ref="dataSource" />
</bean>
1.3.3. 添加CAS 服务器需要用到的jar
拷贝cas-server-support-jdbc-3.3.3.jar和odbc.jar到cas的lib目录下。
1.3.4. 重启应用测试
1.4. Cas与客户端信息交互
cas登录成功默认返回的只有用户名,客户端系统运行时需要更多的信息,通过以下方式配置。
1.4.1. 配置属性attributeRepository
deployerConfigContext.xml文件,同时配置attributeRepository如下:
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
<constructor-arg index="0" ref="casDataSource"/>
<constructor-arg index="1" value="select * from userinfo where {0}"/>
<property name="queryAttributeMapping">
<map>
//这里的key需写username,value对应数据库用户名字段
<entry key="username" value="loginname"/>
</map>
</property>
<property name="resultAttributeMapping">
<map>
<!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值-->
<entry key="id" value="id"/>
<entry key="mobile" value="mobile"/>
<entry key="email" value="email"/>
</map>
其中queryAttributeMapping是组装sql用的查询条件属性,如下表中
结合封装成查询sql就是select * from userinfo where loginname=#username#,resultAttributeMapping是sql执行完毕后返回的结构属性, key对应数据库字段,value对应客户端获取参。
1.4.2. 配置用户认证凭据转化的解析器
在deployerConfigContext.xml中,找到
credentialsToPrincipalResolvers,为UsernamePasswordCredentialsToPrincipalResolver注入attributeRepository,那么attributeRepository就会被触发并通过此类进行解析,红色为新添部分。
<property name="credentialsToPrincipalResolvers">
<list>
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
<property name="attributeRepository" ref="attributeRepository"/>
</bean>
<bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"/>
</list>
</property>
最后
以上就是会撒娇诺言为你收集整理的cas单点登录服务配置的全部内容,希望文章能够帮你解决cas单点登录服务配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复