我们知道CAS SSO 是基于HTTPS协议的单点登陆,如果要用HTTP协议进行传输,那么就需要修改CAS的相关的配置文件,图了方便,但是安全性大打折扣,对于单点登录,一旦被攻击,那么你的所有属于CAS管理的业务系统都可以被自由访问了。个人并不赞成使用HTTP协议,牺牲一点性能换取更好的安全性是值得的。
一、软件环境
1、cas-client:cas-client-3.2.1-release
2、cas-server:cas-server-3.5.2-release
二、修改步骤
1、文件warnCookieGenerator.xml
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="true" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" />
2、文件ticketGrantingTicketCookieGenerator.xml
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="true" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" />
将bean中的p:cookieSecure="true "修改为p:cookieSecure="false"
3、文件deployerConfigContext.xml
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />
添加p:requireSecure="false"
如果我们使用的是基于Filter在web.xml中的方式,至此使用HTTP协议就可以单点登录了。
如果我们使用的Java Core Object的方式,那么还需要进行的下面的步骤
4、文件SecureURL.java
/* * Copyright (c) 2000-2003 Yale University. All rights reserved. * * THIS SOFTWARE IS PROVIDED "AS IS," AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE EXPRESSLY * DISCLAIMED. IN NO EVENT SHALL YALE UNIVERSITY OR ITS EMPLOYEES BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED, THE COSTS OF * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH * DAMAGE. * * Redistribution and use of this software in source or binary forms, * with or without modification, are permitted, provided that the * following conditions are met: * * 1. Any redistribution must include the above copyright notice and * disclaimer and this list of conditions in any related documentation * and, if feasible, in the redistributed software. * * 2. Any redistribution must include the acknowledgment, "This product * includes software developed by Yale University," in any related * documentation and, if feasible, in the redistributed software. * * 3. The names "Yale" and "Yale University" must not be used to endorse * or promote products derived from this software. */ package org.jasig.cas.client.corejavaobject.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * A class housing some utility functions exposing secure URL validation * and content retrieval. The rules are intended to be about as restrictive * as a common browser with respect to server-certificate validation. */ public class SecureURL { private static Log log = LogFactory.getLog(SecureURL.class); /** * For testing only... */ public static void main(String args[]) throws IOException { System.setProperty( "java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); System.out.println(SecureURL.retrieve(args[0])); } /** * Retrieve the contents from the given URL as a String, assuming the * URL's server matches what we expect it to match. */ public static String retrieve(String url) throws IOException { if (log.isTraceEnabled()){ log.trace("entering retrieve(" + url + ")"); } BufferedReader r = null; try { URL u = new URL(url); if (!u.getProtocol().equals("https")){ // IOException may not be the best exception we could throw here // since the problem is with the URL argument we were passed, not // IO. -awp9 log.error("retrieve(" + url + ") on an illegal URL since protocol was not https."); throw new IOException("only 'https' URLs are valid for this method"); } URLConnection uc = u.openConnection(); uc.setRequestProperty("Connection", "close"); r = new BufferedReader(new InputStreamReader(uc.getInputStream())); String line; StringBuffer buf = new StringBuffer(); while ((line = r.readLine()) != null) buf.append(line + "\n"); return buf.toString(); } finally { try { if (r != null) r.close(); } catch (IOException ex) { // ignore } } } }
找到下面的部分
if (!u.getProtocol().equals("https")){ // IOException may not be the best exception we could throw here // since the problem is with the URL argument we were passed, not // IO. -awp9 log.error("retrieve(" + url + ") on an illegal URL since protocol was not https."); throw new IOException("only 'https' URLs are valid for this method"); }
相信大家应该明白了吧,只需要将此部分注释掉即可。
备注:cookieSecure都修改false,我们来看下其作用是什么?
Secure是Cookie的一个属性。
属性值
如果客户端仅在使用安全超文本传输协议 (HTTPS) 的后继请求中返回 Cookie,则为 true;否则为 false。默认为 false。
实际上,当此属性为 true 时,该 Cookie 只能通过 https:// 请求来发送。即使用http协议是无法传递Cookie的。
相关推荐
在本文中,我们将深入探讨基于CAS3.0的单点登录实现,这是一项广泛应用的身份验证服务。 CAS(Central Authentication Service)是耶鲁大学开发的开源项目,旨在提供一个安全、集中式的身份验证框架。CAS3.0是其较...
1. **单点登录**:用户只需登录一次,即可访问所有支持CAS的系统。 2. **票证验证**:通过票证(Ticket)机制,确保用户身份的安全传输。 3. **多协议支持**:支持多种协议,如CAS、SAML、OAuth等。 4. **可扩展性**...
CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,研究如何采用 CAS 实现轻量级单点登录解决方案。 CAS 是 Yale 大学发起的...
在"单点登录 - CAS【三】 LDAP认证源"这个主题中,我们将深入探讨如何将CAS与LDAP(Lightweight Directory Access Protocol)结合使用,以实现基于LDAP的身份验证。LDAP是一种轻量级的目录访问协议,广泛用于存储和...
单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他相互信任的系统。CAS(Central Authentication Service)是 Yale 大学开发的一个开源项目...
在IT行业中,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,它允许用户在一个系统上登录后,无需再次验证即可访问其他多个相互信任的系统。本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何...
6. **多协议支持**:除了CAS协议,还支持SAML、OAuth、OpenID Connect等其他身份验证协议。 **CAS的部署和配置:** 1. **环境准备**:安装Java运行环境,如JDK,选择合适的服务器平台,如Tomcat。 2. **CAS服务器...
CAS(Central Authentication Service)单点登录(Single Sign-On,简称SSO)是一种网络认证协议,旨在简化用户在多个应用系统间的登录流程。当用户通过CAS认证后,可以在无需再次输入凭证的情况下访问已接入CAS的...
CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。在“cas-3.4.1_单点登录_CAS_”这个项目中,你将获得一个完整的CAS...
CAS(Central Authentication Service)单点登录系统是一种网络身份验证协议,它允许用户通过单一的身份验证过程访问多个应用系统。在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现...
本文将详细介绍如何利用 CAS(Central Authentication Service)协议来实现 Mantis 的单点登录和登出功能。 #### 实现步骤 ##### 第一步:环境准备 1. **安装 CAS 服务器**:确保 CAS 服务器已经部署完成,并且...
1. 单点登录:用户只需一次登录,就可以访问所有支持CAS的系统。 2. 安全性:通过采用HTTPS加密通信,保护用户凭证免受中间人攻击。 3. 集成友好:提供Java和PHP等语言的客户端库,便于集成到现有应用中。 4. 可扩展...
### CAS单点登录HTTP协议版本配置指南 #### 一、CAS版本及所需组件 本配置指南涉及的CAS版本如下: - **服务端**:cas-server-3.4.7 - **客户端**:cas-client-3.2.0 对于服务端而言,仅需解压`cas-server-webapp...
django-mama-cas, Django 中央身份验证服务( CAS ) 单点登录(Single Sign-On) 服务器 MamaCAS MamaCAS是 Django 中央认证服务( CAS ) 单一登录和单一注销服务器。 它实现了 CAS 1.0.2.0和 3.0协议,包括一些可选的...
在本案例中,我们关注的是 Shiro 集成 CAS(Central Authentication Service)的实现,这通常用于实现单点登录(Single Sign-On, SSO)功能。 "shiro-cas-1.2.1.jar" 是一个专门针对 Shiro 与 CAS 集成的库,版本为...
CAS(Central Authentication Service)是中央认证服务的缩写,它是一种广泛使用的单点登录(Single Sign-On, SSO)框架,主要用于实现用户在一个系统登录后,可以无须再次验证即可访问其他相互信任的系统。...
[置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析 http://blog.csdn.net/ae6623/article/details/8848107 目 录 1 引言 4 1.1 摘要 4 1.2 范围 4 1.3 读者对象 4 1.4 关键词 4 2 ...