我是靠谱客的博主 会撒娇诺言,最近开发中收集的这篇文章主要介绍cas单点登录服务配置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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单点登录服务配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部