CAS - 简单介绍与配置数据源登录与退出

一. 什么是单点登录

单点登录Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。当我们的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的 session 是无法解决的,我们需要使用相关的单点登录技术来解决。

 

二. 什么是 CAS

CAS Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 2004 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

1】开源的企业级单点登录解决方案。

2CAS Server 为需要独立部署的 Web 应用。

3CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

从结构上看,CAS 包含两个部分: CAS Server CAS ClientCAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:

SSO 单点登录访问流程主要有以下步骤:

  1. 访问服务:SSO 客户端发送请求访问应用系统提供的服务资源。
  2. 定向认证:SSO 客户端会重定向用户请求到 SSO 服务器。
  3. 用户认证:用户身份认证。
  4. 发放票据:SSO 服务器会产生一个随机的 Service Ticket
  5. 验证票据:SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。
  6. 传输用户信息:SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

三. CAS 服务端部署

1. 下载一个纯净的 Tomcat 服务器, 下载地址: https://pan.baidu.com/s/1YY3o6qno1DuR7oxwgMkdEQ

2. 下载 cas.war 服务端, 下载地址: https://pan.baidu.com/s/1w7Y1d3Tr0P0MBlGvRcLVTg

3. 将下载好的 Tomcat 服务器解压到没有中文没有空格的文件目录下, 再将下载好的 cas.war 服务端剪切到 Tomcat 的 webapps 目录下, 启动 Tomcat 中 bin 目录下的 , 将自动解压 cas.war 包.

4. 浏览器输入 http://localhost:8080/cas/login 可以进入到如下页面:

四. CAS 服务端配置

1. 修改端口号

A. 修改 Tomcat 的端口号

打开 Tomcat 目录 conf\server.xml  找到下面的配置 (Tomcat 初始号端口号为 8080, 将其修改为其他端口号, 如 9100)

B. 修改 cas 配置文件

修改解压后 cas WEB-INF/cas.properties:

2. 去除 https 认证​​​​​​

CAS 默认使用的是 HTTPS 协议,如果使用 HTTPS 协议需要 SSL 安全证书(需向特定的机构申请和购买) 。如果对安全要求不高或是在开发测试阶段,可使用 HTTP 协议。我们这里讲解通过修改配置,让 CAS 使用 HTTP 协议。

A. 修改 cas WEB-INF/deployerConfigContext.xml

这里需要修改参数 p:requireSecure="false"默认为 true, requireSecure 属性意思为是否需要安全验证,即 HTTPSfalse 为不采用

B. 修改 cas 的 WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

参数默认 p:cookieSecure="true",同理为 HTTPS 验证相关,TRUE 为采用 HTTPS 验证,FALSE 为不采用 https 验证。

参数默认 p:cookieMaxAge="-1",是 COOKIE 的最大生命周期,-1 为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于 0 的数字,比如 3600 等,意思是在 3600 秒内,打开任意窗口,都不需要验证。 我们这里将 cookieSecure 改为 false ,  cookieMaxAge 改为 3600。

C. 修改 cas WEB-INF/spring-configuration/warnCookieGenerator.xml:

我们这里将 cookieSecure 改为 false ,  cookieMaxAge 改为 3600。

 

5. 用户名登录

在 cas 服务端中 web-inf deployerConfigContext.xml 文件中:

<!-- 选择登录用户数据源 -->
<constructor-arg>
    <map>
        <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
        <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
    </map>
</constructor-arg>

以上 key-ref="primaryAuthenticationHandler" 表示使用静态用户名密码的配置登录, 要想使用数据库中的用户名和密码登录将值修改为 "dbAuthHandler"

<!-- 静态用户名密码配置 -->
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
    <property name="users">
        <map>
			<entry key="admin" value="admin"/>
        </map>
    </property>
</bean>
	
<!-- 数据库登录用户数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"    	 	 	  
    p:driverClass="com.mysql.jdbc.Driver"    	 	 	  
	p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/登录用户表所在的数据库名?characterEncoding=utf8"  
	p:user="root"    	 	 	  
	p:password="root" /> 
			
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"   
 	c:encodingAlgorithm="MD5"    	 	
	p:characterEncoding="UTF-8" />
			
<bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"    	 	  
	p:dataSource-ref="dataSource"    	 	  
	p:sql="select 密码 from 表名 where 用户名 = ?"    	 	  
	p:passwordEncoder-ref="passwordEncoder"/>

导入数据库连接池依赖包, 下载地址: https://pan.baidu.com/s/13diIxLe9shgliXF-TQfynQ

将解压后的 三个依赖包 剪切到 cas  的webapps\cas\WEB-INF\lib 下.

选择好用户登录数据源后, 再次使用新的端口号登录, 即可登录到成功页面:

 

六. 登录用户退出

浏览器地址栏输入: http://localhost:9100/cas/logout  

即可看到退出后的提示页面:

猜你喜欢

转载自blog.csdn.net/weixin_42629433/article/details/84309210
今日推荐