CAS4.0单点登录服务器的配置

SSO和CAS

  单点登录(SingleSign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

  CAS是中央认证服务Central Authentication Service的简称,是对单点登录SSO(Single Sign On)的一种实现。最初由耶鲁大学的Shawn Bayern 开发,后由Jasig社区维护,经过十多年发展,目前已成为影响最大、广泛使用的、基于Java实现的、开源SSO解决方案。CAS由Cas Server和Cas Client两部分组成,Cas Server是核心,而Cas Client通常就对应于我们的应用。一个Cas Server可以对应于多个Cas Client。它允许我们在一个Client进行登录以后无需再让用户输入用户名和密码进行认证即可访问其它Client应用。

准备工作

安装JDK和Tomcat:
  已经配置好Tomcat的可以跳过此步骤,未安装配置的可以参考另外一篇博客:CentOS6.5中Tomcat的安装配置

启用HTTPS传输协议

(1) 生成证书

1
keytool -genkey -alias tomcat -keyalg RSA -keystore /root/keystore

注: 名字与姓氏一项需输入域名。
(2) 导出证书文件:

1
keytool -export -file /opt/tomcat.crt -alias tomcat -keystore /root/keystore

(3) 将证书tomcat.crt导入到JVM中

1
keytool -import -keystore /usr/java/jdk1.8.0_101/jre/lib/security/cacerts -file /opt/tomcat.crt -alias tomcat

(4) tomcat中配置https传输
  在tomcat下找到/conf/server.xml,默认tomcat是没有打开https的:

1
<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/root/keystore" keystorePass="changeit" maxThreads="150" port="443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS"/>

(5) 配置域名
  在测试环境中,为了能使用域名https://www.jiangyayu.com 访问CAS服务器,需要简单配置一下客户端的hosts文件,在hosts文件末添加:

1
192.168.31.110 www.jiangyayu.com

(6) 启动tomcat,在客户端访问:https://www.jiangyayu.com
  浏览器给出警告:

选择高级->继续前往,则通过HTTPS加密协议访问到tomcat的主页:

配置CAS服务器

(1) CAS服务器端配置
  CAS服务端下载:https://developer.jasig.org/cas/
  下载完成后将cas-server-4.0.0-release.zip解压,解压cas-server-4.0.0-release/modules/cas-server-webapp-4.0.0.war,改名为cas.war,然后复制cas目录到你的tomcat/webapp目录下。
(2) 访问CAS应用
  https://www.jiangyayu.com/cas
  打开了CAS服务器的页面输入账户/密码:casuser/Mellon
注:cas4.0后默认的密码验证不是简单的相同了。在配置文件里, 默认是 casuser:Mellon。

配置应用服务器

(1)配置环境
  再应用服务器上安装配置好JDK、Tomcat,并启用HTTPS传输协议,并在客户端hosts文件中为客户端服务器指定域名:

1
192.168.31.110 www.app1.com

(2) 部署客户端webapp
  此处使用Tomcat自带的examples。进入Tomcat安装目录下的webapp文件夹,将其中的examples文件夹复制一份并重命名为test
(3) 下载cas-client-3.3.3-release.zip
(4) 添加所需jar
  进入test文件夹,删除WEB-INF/lib中的所有jar包。解压cas-client-3.3.3-release.zip,将modules中的所有jar文件复制到WEB-INF中。

(5) 修改WEB-INF/web.xml,添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!-- ==================== 单点登录开始 ===================== -->
<!--用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!--该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CASSingle Sign OutFilter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASSingle Sign OutFilter</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://www.jiangyayu.com/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://www.app1.com</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CASValidationFilter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://www.jiangyayu.com/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://www.app1.com</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CASHttpServletRequest WrapperFilter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>CASHttpServletRequest WrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
<filter>
<filter-name>CASAssertion Thread LocalFilter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASAssertion Thread LocalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ========================单点登录结束 ======================== -->

(6) 重启Tomcat
(7) 测试
  打开客户机浏览器,访问:
  https://www.app1.com/test
  跳转到地址:
  https://www.jiangyayu.com/cas/login?service=https%3A%2F%2Fwww.app1.com%2Ftest%2F

  输入CAS的用户/密码(casuser/Mellon),跳转回访问界面:

  表示CAS验证通过。此时新建标签页,再次访问https://www.app1.com/test/ ,发现无需再次验证可以直接访问:

通过数据库中的用户密码认证

(1) mysql中创建用户数据库
  创建用于存放用户数据的数据库:

1
CREATE DATABASE db_user;

(2) 创建用户表

1
2
3
4
5
6
CREATE TABLE ` t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

(3) 创建用户表
  向表中插入以下数据:

1
INSERT INTO `sso_t_user` VALUES (1,'admin','96e79218965eb72c92a549dd5a330112');

注:密码以MD5 加密后存放数据库中为例
“111111”的MD5值为:“96e79218965eb72c92a549dd5a330112”
(4) 修改cas服务端配置
  在%tomcat_cas%/webapps/cas/WEB_INF/deployerConfigContext.xml 找到如下信息:

1
2
3
4
5
6
7
8
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>

  修改成如下:

1
2
3
4
5
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" ></property>
<property name="sql" value="select password from t_user where username=?" ></property>
<property name="passwordEncoder" ref="MD5PasswordEncoder" ></property>
</bean>

  同时增加datasource和加密处理两个bean的定义:

1
2
3
4
5
6
7
8
9
10
11
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value=" jdbc:mysql://localhost:3306/db_user" />
<property name="username" value="root" />
<property name="password" value="1qaz2wsx" />
</bean>
<bean id="MD5PasswordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg index="0" value="MD5" />
</bean>

(5) 添加相关的jar包
  需要在cas的web项目lib文件夹下添加两个包:cas-server-support-jdbc-x.x.x.jarmysql-connector-java-x.x.x-bin.jar
(6) 访问CAS主页
  通过账号密码:admin/111111访问CAS主页 通过验证

若本文对您有帮助,请打赏鼓励本人!
---------------- End ----------------
扫二维码
扫一扫,使用手机查看

扫一扫,使用手机查看

QQ