cas+sso实现单点登录的步骤
2017-11-29 17:28
337 查看
刚接触这个东西,花了一天时间搞出这么一个demo,作为小新,我将步骤详细列出,希望对各位有所帮助
1.根据演示需求,用修改hosts 文件的方法添加域名最简单方便
(这个非常重要,因为CAS单点登录系统是基于JAVA安全证书的 https 访问, 要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.),
编辑文件 C:\Windows\System32\drivers\etc\hosts 在文件末端添加下面三条信息:
127.0.0.1 mycas.server.com
127.0.0.1 mycas.client1.com
127.0.0.1 mycas.client2.com
********************************** 服务端 *************************************************************************************************************
若不想配置证书等https的安全协议,而是用http,则只需要配置如下文件即可
CAS默认使用HTTPS协议,如果对安全要求不高,可使用HTTP协议。
修改为HTTP协议的步骤如下:
修改tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml 增加参数p:requireSecure="false",意为:不需要安全验证。
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"
p:requireSecure="false"/>
修改 ticketGrantingTicketCookieGenerator.xml (路径:cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml)中
ticketGrantingTicketCookieGeneratorp:cookieSecure 属性的值改为 false。
<bean id="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"p:cookieMaxAge="-1" p:cookieName="CASTGC"p:cookiePath="/cas" />
配置完成后直接完成下面第5步后完成服务端的部署
2.生成信任证书
tomcat自带的keytool生成信任证书
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass 123456 -validity 365 -keystore f:\sso\ssodemo.keystore -storepass 123456
注意:这一步输入你的名字与姓氏时,将 mycas.server.com 输入,这里的 storepass 与keypass 必须一致,我在此设密码为123456
信任证书导出
keytool -export -alias ssodemo -keystore f:\sso\ssodemo.keystore -file f:\sso\ssodemo.crt -storepass 123456
信任证书导入到客户端
把%JAVA_HOME%/jre/lib/security/cacerts文件移出c盘(可以暂时放在桌面,我放在证书的目录里),否则无法访问 下面的命令执行完后再移进去
keytool -import -trustcacerts -alias tomcat -keystore f:\sso\cacerts -file f:\sso\ssodemo.crt -alias ssodemo
注意:若提示密码输入错误时,输入changeit
3.部署CAS-Server相关的Tomcat
1.找到tomcat/conf/server.xml
2.找到已被注释的下面代码(一般都是在83行)
<!--
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-->
去掉注释,修改为以下代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="f:\sso\ssodemo.keystore"
keystorePass="123456"
clientAuth="false" sslProtocol="TLS" />
注意:keystoreFile 为生成信任证书时的文件路劲,keystorePass则是生成证书时的密码
4.测试tomcat配置是否成功(如果熟练有信心的大神则直接跳过此步) https://mycas.server.com:8443/
5.部署CAS-Server
本文以cas-server-webapp-4.0.0.rar为例,解压提取cas-server-webapp-4.0.0.war文件,把改文件copy到E:\apache-tomcat-7.0.57\webapps 目下,并重命名为:cas.war。
启动tomcat,在浏览器地址栏输入:https://mycas.server.com:8443/cas ,回车,出现CAS服务端的登录验证首页:
6.配置cas的配置文件 (tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml)
(1)以下这段配置的是默认的账户名和密码 此处配置自己的mysql数据库,故这段代码注释掉
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
(2)上面代码注释掉之后,在后面添加下面代码
<!-- 指定c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property ame="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/myProject?useUnicode=true&characterEncoding=UTF-8" />
<property name="user" value="root" />
<property name="password" value="root" />
</bean>
<!-- 访问本地数据库 -->
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="SELECT u.`password` FROM `sec_user` u WHERE u.`account` = ?" />
(3)找到下面这段配置
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<!-- 注释这个-->
<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
<!-- key-ref指定自己的本地数据库访问 -->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
</map>
</constructor-arg>
注意,需要导入jar包:
c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar、mchange-commons-0.2
这3个缺一不可。将这3个jar放到E:\apache-tomcat-7.0.57\webapps\cas\WEB-INF\lib目录下。
----------------------- 上述服务端已经配置完成 ---------------------------------
************************************************************ 客户端的配置 ***************************************************************************
1.导入jar包
cas-client-core-3.2.1.jar,
commons-logging-1.1.jar
上述两个jar包在下载的cas-client的解压包里modules目录下有
2.修改tomcat服务的端口号
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
参考修改如下
<Server port="18005" shutdown="SHUTDOWN">
<Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="18443" />
<Connector port="18009" protocol="AJP/1.3"redirectPort="18443" />
3.在web.xml中配置如下
<!-----------------单点登录开始---------------------------->
<!--用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!--该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CASSingle Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASSingle Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://demo.micmiu.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.micmiu.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CASValidation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://demo.micmiu.com:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.micmiu.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASValidation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器负责实现HttpServletRequest请求的包裹,
比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
-->
<filter>
<filter-name>CASHttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASHttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CASAssertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASAssertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--------------------------------单点登录结束 ------------------------------->
1.根据演示需求,用修改hosts 文件的方法添加域名最简单方便
(这个非常重要,因为CAS单点登录系统是基于JAVA安全证书的 https 访问, 要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.),
编辑文件 C:\Windows\System32\drivers\etc\hosts 在文件末端添加下面三条信息:
127.0.0.1 mycas.server.com
127.0.0.1 mycas.client1.com
127.0.0.1 mycas.client2.com
********************************** 服务端 *************************************************************************************************************
若不想配置证书等https的安全协议,而是用http,则只需要配置如下文件即可
CAS默认使用HTTPS协议,如果对安全要求不高,可使用HTTP协议。
修改为HTTP协议的步骤如下:
修改tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml 增加参数p:requireSecure="false",意为:不需要安全验证。
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"
p:requireSecure="false"/>
修改 ticketGrantingTicketCookieGenerator.xml (路径:cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml)中
ticketGrantingTicketCookieGeneratorp:cookieSecure 属性的值改为 false。
<bean id="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"p:cookieMaxAge="-1" p:cookieName="CASTGC"p:cookiePath="/cas" />
配置完成后直接完成下面第5步后完成服务端的部署
2.生成信任证书
tomcat自带的keytool生成信任证书
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass 123456 -validity 365 -keystore f:\sso\ssodemo.keystore -storepass 123456
注意:这一步输入你的名字与姓氏时,将 mycas.server.com 输入,这里的 storepass 与keypass 必须一致,我在此设密码为123456
信任证书导出
keytool -export -alias ssodemo -keystore f:\sso\ssodemo.keystore -file f:\sso\ssodemo.crt -storepass 123456
信任证书导入到客户端
把%JAVA_HOME%/jre/lib/security/cacerts文件移出c盘(可以暂时放在桌面,我放在证书的目录里),否则无法访问 下面的命令执行完后再移进去
keytool -import -trustcacerts -alias tomcat -keystore f:\sso\cacerts -file f:\sso\ssodemo.crt -alias ssodemo
注意:若提示密码输入错误时,输入changeit
3.部署CAS-Server相关的Tomcat
1.找到tomcat/conf/server.xml
2.找到已被注释的下面代码(一般都是在83行)
<!--
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-->
去掉注释,修改为以下代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="f:\sso\ssodemo.keystore"
keystorePass="123456"
clientAuth="false" sslProtocol="TLS" />
注意:keystoreFile 为生成信任证书时的文件路劲,keystorePass则是生成证书时的密码
4.测试tomcat配置是否成功(如果熟练有信心的大神则直接跳过此步) https://mycas.server.com:8443/
5.部署CAS-Server
本文以cas-server-webapp-4.0.0.rar为例,解压提取cas-server-webapp-4.0.0.war文件,把改文件copy到E:\apache-tomcat-7.0.57\webapps 目下,并重命名为:cas.war。
启动tomcat,在浏览器地址栏输入:https://mycas.server.com:8443/cas ,回车,出现CAS服务端的登录验证首页:
6.配置cas的配置文件 (tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml)
(1)以下这段配置的是默认的账户名和密码 此处配置自己的mysql数据库,故这段代码注释掉
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
(2)上面代码注释掉之后,在后面添加下面代码
<!-- 指定c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property ame="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/myProject?useUnicode=true&characterEncoding=UTF-8" />
<property name="user" value="root" />
<property name="password" value="root" />
</bean>
<!-- 访问本地数据库 -->
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="SELECT u.`password` FROM `sec_user` u WHERE u.`account` = ?" />
(3)找到下面这段配置
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<!-- 注释这个-->
<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
<!-- key-ref指定自己的本地数据库访问 -->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
</map>
</constructor-arg>
注意,需要导入jar包:
c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar、mchange-commons-0.2
这3个缺一不可。将这3个jar放到E:\apache-tomcat-7.0.57\webapps\cas\WEB-INF\lib目录下。
----------------------- 上述服务端已经配置完成 ---------------------------------
************************************************************ 客户端的配置 ***************************************************************************
1.导入jar包
cas-client-core-3.2.1.jar,
commons-logging-1.1.jar
上述两个jar包在下载的cas-client的解压包里modules目录下有
2.修改tomcat服务的端口号
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
参考修改如下
<Server port="18005" shutdown="SHUTDOWN">
<Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="18443" />
<Connector port="18009" protocol="AJP/1.3"redirectPort="18443" />
3.在web.xml中配置如下
<!-----------------单点登录开始---------------------------->
<!--用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!--该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CASSingle Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASSingle Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://demo.micmiu.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.micmiu.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CASValidation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://demo.micmiu.com:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.micmiu.com:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASValidation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器负责实现HttpServletRequest请求的包裹,
比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
-->
<filter>
<filter-name>CASHttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASHttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CASAssertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASAssertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--------------------------------单点登录结束 ------------------------------->
相关文章推荐
- CAS实现单点登录(SSO)经典完整教程
- CAS实现SSO(单点登录)
- CAS实现SSO单点登录原理
- CAS实现单点登录(SSO)经典完整教程
- CAS实现SSO单点登录原理
- CAS实现单点登录SSO执行原理探究
- CAS 实现单点登录(SSO)基本实现流程(一)
- IT忍者神龟之基于CAS实现单点登录(SSO)之配置CAS服务端的数据库查询认证机制(一)
- Liferay门户与CAS实现SSO单点登录
- springMVC集成shiro与cas实现SSO单点登录
- WebSphere环境下的SSO(Single sign-on:单点登录、全网漫游)实现之: 二 SSO(Single Sign-On)实现步骤
- CAS实现单点登录(SSO)经典完整教程
- spring + shiro + cas 实现sso单点登录
- CAS实现单点登录(SSO)过程浅析
- spring + shiro + cas 实现sso单点登录
- CAS实现单点登录SSO执行原理探究(终于明白了)
- CAS实现SSO单点登录原理介绍
- spring + shiro + cas 实现sso单点登录
- CAS实现单点登录SSO执行原理探究(终于明白了)
- CAS实现SSO单点登录原理