统一身份认证-CAS配置实现
统一身份认证服务器的研究与实现

访 问 We b应 用 时 .都需 要 注 册 一 次 .且 每 次 访 问 不 同
We b应 用 时 . 需 进 行 登 录操 作 . 是非 常 麻 烦 的事 情 都 因 此 国 内外 研 究 学 者 们 便 提 出使 用 户 只 注册 一 次 并 登 录 一 次 , 可 以 在 多 个 应 ,j 间 进 行 访 问 的思 想 . 就 }之 { _ 因此
作 原 理及 其 实施 部 署过 程 . 其 中的关键 技 术 进行 了详 细描 述 、 对
关 键词 : 一 身份 认证 : S 单 点登 录 统 CA :
中图分 类 号 :4 2 ( 8 3
一
文献 标识 码 : B
文章 编 号 :63 8 5 (0 ) — 0 6 0 17 — 4 42 1 0 0 1— 3 1 3
示 用 户输 入用 户 名 和 口 令 : () 4 如果用 户名 和 口令被 S O服务器成 功认证 . S O S 则 S 服务 器将 浏 览 器重 定 向到 原 We b应 用 的 服 务器 . 且 在 并 U ( RL 统~ 资 源 定位 符 ) 数 中包 含一 个票 据 : 参 ( ) b应用 获 得 了 浏 览器 传 来 的票 据 后 , 5 We 连接 S O S 服务 器 . 查 票据 是 否有 效 : 检 ( )S 6 S O服 务 器若 验 证 票 据成 功 . 返 回一 个 肯 定 的 则
程 由 于 只 有 S O 服 务 器 才 知 道 用 户 名 和 票 据 的 关 系 , S
冈此 用 户无法 伪 造票 据 要 保 证用 户 无法 猜 出 S O服 务 S 器 生 成 的票 据 .S S O服 务 器生 成 的 票据 就 必 须非 常 随 机 . 以确 保整 个 系统 的 安全 . . 由于单 点 登 录 只能 解 决用 户 的身 份认 证 问题 .所 以
SSO单点登录—CAS统一身份认证

SSO单点登录—CAS统⼀⾝份认证单点登录SSO(Single Sign ON)如:在学校登录了OA系统,再打开考试系统、教务系统,都会实现⾃动登录。
统⼀⾝份认证CAS(Central Authentication Service)CAS 是由耶鲁⼤学发起的企业级开源项⽬,历经20多年的完善,具有较⾼的稳定性、安全性。
国内多数⾼校的SSO都基于CAS。
// 3.1如果有票据,则进⾏验证CasVO casVO = checkTicket(request);if (casVO.isLogin() && clientSystem.doLogin(casVO)){// 3.2给session中写⼊登录标识(⽤于checkLogin)session.setAttribute(CasConfig.LOGIN_KEY, true);// 3.3登录成功跳转⾄业务系统urlresponse.sendRedirect(targetUrl);} else {// cas账户信息异常,跳转配置的错误页⾯String errorUrl = getErrorUrl(request);response.sendRedirect(errorUrl);}} else {// 3.2如果ticket不存在String loginUrl = getLoginUrl(request);System.err.println("loginUrl:"+loginUrl);response.sendRedirect(loginUrl);}}}private CasVO checkTicket(HttpServletRequest request) throws IOException {// 1.获取票据验证的urlString serviceValidateUrl = getServiceValidateUrl(request);System.out.println("验证票据的地址:" + serviceValidateUrl);// 2.get请求获取CAS服务器的登录信息String casUserInfoXml = doGet(serviceValidateUrl);casUserInfoXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + casUserInfoXml;// 3.解析返回的xml结果System.out.println(casUserInfoXml);CasVO casVO = resolveCasXml(casUserInfoXml);return casVO;}/*** 业务系统的登录接⼝*/interface ClientSystem {boolean doLogin(CasVO casVO);}/*** 解析CAS账户信息* @param casUserInfoXml* @return*/private CasVO resolveCasXml(String casUserInfoXml) {final String CAS_PREFIX = "cas:";final String LOGIN_SUCCESS_KEY = CAS_PREFIX + "authenticationSuccess";final String ACCOUNT_KEY = CAS_PREFIX + "user";final String ATTRIBUTES_KEY = CAS_PREFIX + "attributes";CasVO casVO = new CasVO();if (casUserInfoXml == null || "".equals(casUserInfoXml)) {return casVO;}DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();InputStream in = null;try {DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();in = IOUtils.toInputStream(casUserInfoXml, Charset.forName(CasConfig.UTF_8));Document rootDoc = docBuilder.parse(in);NodeList successNodeList = rootDoc.getElementsByTagName(LOGIN_SUCCESS_KEY);if (successNodeList.getLength() > 0) {Node successNode = successNodeList.item(0);Document successDocument = successNode.getOwnerDocument();NodeList accountNodeList = successDocument.getElementsByTagName(ACCOUNT_KEY);if (accountNodeList != null&& accountNodeList.getLength() > 0) {Node accountNode = accountNodeList.item(0);Node accountText = accountNode.getFirstChild();String nodeValue = accountText.getNodeValue();casVO.setAccount(nodeValue);}NodeList attrsNodeList = successDocument.getElementsByTagName(ATTRIBUTES_KEY);if (attrsNodeList.getLength() > 0) {Node attrsNode = attrsNodeList.item(0);if (attrsNode.hasChildNodes()) {Document attrsDoc = attrsNode.getOwnerDocument();Field[] fields = casVO.getClass().getDeclaredFields();for (Field field : fields) {String fieldName = field.getName();String attrTagName = CAS_PREFIX + fieldName;NodeList attrNodeList = attrsDoc.getElementsByTagName(attrTagName);if (attrNodeList.getLength() > 0) {Node attrNode = attrNodeList.item(0);Node attrText = attrNode.getFirstChild();if (attrText != null) {field.set(casVO, attrText.getNodeValue().trim());}}}}}}} catch (Exception e) {// 解析⽤户信息失败!e.printStackTrace();} finally {IOUtils.closeQuietly(in);}return casVO;}/*** 获取验证票据的url* @param request* @return*/private String getServiceValidateUrl(HttpServletRequest request) throws IOException {// 1.获取targetUrlString targetUrl = getTargetUrl(request);System.err.println("targetUrl:"+targetUrl);* get请求* @param* @return*/private String doGet(String urlStr) throws IOException {URL url = new URL(urlStr);InputStream in = null;HttpURLConnection conn = null;try {skipSSL();conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.connect();in = conn.getInputStream();return IOUtils.toString(in, Charset.forName(CasConfig.UTF_8));} finally {IOUtils.close(conn);IOUtils.closeQuietly(in);}}/*** 绕过SSL验证*/private void skipSSL() {try {HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {public boolean verify(String hostname, SSLSession session) {return true;}});SSLContext context = SSLContext.getInstance("TLS");context.init(null, new X509TrustManager[]{new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}}, new SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());} catch (Exception e) {e.printStackTrace();}}public static abstract class IOUtils {private static final int EOF = -1;private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;public static void close(URLConnection conn) {if (conn instanceof HttpURLConnection) {((HttpURLConnection) conn).disconnect();}}public static void closeQuietly(InputStream input) {closeQuietly((Closeable) input);}public static void closeQuietly(Closeable closeable) {try {if (closeable != null) {closeable.close();}} catch (IOException ioe) {// ignore}}public static String toString(InputStream input, Charset encoding) throws IOException {StringWriter sw = new StringWriter();copy(input, sw, encoding);return sw.toString();}public static void copy(InputStream input, Writer output, Charset encoding) throws IOException {encoding = encoding == null ? Charset.defaultCharset() : encoding;InputStreamReader in = new InputStreamReader(input, encoding);copy(in, output);}public static int copy(Reader input, Writer output) throws IOException {long count = copyLarge(input, output);if (count > Integer.MAX_VALUE) {return -1;}return (int) count;}public static long copyLarge(Reader input, Writer output) throws IOException {return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]);}public static long copyLarge(Reader input, Writer output, char[] buffer) throws IOException {long count = 0;int n;while (EOF != (n = input.read(buffer))) {output.write(buffer, 0, n);count += n;}return count;}public static InputStream toInputStream(String input, Charset encoding) {return new ByteArrayInputStream(input.getBytes());}}}CasUtilpackage com.zxz.sso.controller;/*** 解析的CAS账户信息*/public class CasVO {private String account;private String userName;public boolean isLogin() {return account != null && !"".equals(account);public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}}CasVO。
cas-management 配置说明-概述说明以及解释

cas-management 配置说明-概述说明以及解释1.引言1.1 概述CAS-Management是一种用于统一身份认证和授权管理的开源软件,旨在提供安全、可扩展和灵活的身份认证解决方案。
它基于CAS(Central Authentication Service)协议,可以帮助组织轻松地集成各种应用程序和服务,实现单点登录和安全身份验证。
本文旨在介绍CAS-Management的配置及使用方法,帮助读者了解如何快速搭建和部署CAS-Management,并解决在配置过程中可能遇到的常见问题。
通过学习本文,读者将能够更好地使用CAS-Management 来管理用户身份验证和授权,提升系统的安全性和用户体验。
1.2 文章结构文章结构部分应该包括本篇文章的整体框架和组织结构。
在文章结构部分,通常会描述文章的分章节内容和主要议题。
具体来说,在CAS-Management 配置说明这篇文章中,文章结构部分可以简要概括为以下几个方面:1. 引言部分:介绍CAS-Management的背景和重要性,概括本文的内容以及解决问题的目的。
2. 正文部分:主要分为CAS-Management简介、配置步骤和常见问题解决方法三大部分,详细介绍CAS-Management系统的相关知识和配置方法。
3. 结论部分:总结文章内容,展望未来CAS-Management的发展,并结束整篇文章的结尾。
在文章结构中,以上各个部分应该清晰明了,使读者能够快速了解文章的整体结构和主要内容。
1.3 目的CAS-Management 配置说明的主要目的是帮助读者了解如何配置和使用CAS-Management,提供详细的配置步骤和常见问题的解决方法。
通过本文,读者将能够快速上手CAS-Management,并且能够避免一些常见的配置错误。
此外,本文还旨在介绍CAS-Management 的基本概念,并展望其在未来的发展方向,帮助读者更好地理解和使用这一工具。
cas-server 服务端认证流程

cas-server 服务端认证流程随着互联网的发展,越来越多的应用程序需要进行用户身份认证,以保障用户的信息安全。
而CAS(Central Authentication Service)就是一种常见的单点登入认证系统,它为应用程序提供了统一的用户身份认证服务,使用户只需要登入一次就可以访问多个应用。
在CAS系统中,服务端起着至关重要的作用,它负责处理用户的身份认证请求,并将认证结果返回给应用程序。
本文将深入探讨CAS服务端的认证流程,帮助读者全面了解CAS系统的运作原理。
一、客户端发起认证请求1. 客户端(应用程序)向CAS服务端发起认证请求,用户尚未登入时,CAS服务端将拦截所有来自客户端的请求。
2. 当用户访问需要身份认证的应用程序时,应用程序将重定向至CAS服务端,并携带一个特定的参数(例如service参数),以便CAS服务端可以识别应用程序的身份。
3. CAS服务端接收到认证请求后,将展现登入界面,即用户需要输入用户名和密码进行认证。
二、用户认证过程1. 用户在CAS服务端输入用户名和密码,提交认证请求。
2. CAS服务端将用户名和密码与其所持有的用户数据库进行比对,验证用户身份。
3. 如果用户名和密码验证成功,CAS服务端将生成一个票据(ticket),同时在用户浏览器中生成一个ST(Service Ticket),并将ST发送给客户端。
三、客户端获取Service Ticket1. 客户端接收到ST后,将携带ST作为参数,向CAS服务端发起票据验证请求,验证该ST是否有效。
2. CAS服务端验证ST的有效性,如果通过验证,将返回用户的身份信息给客户端。
四、客户端获取用户信息1. 客户端接收到用户身份信息后,将根据自身业务需求处理用户身份信息,比如在应用程序中创建用户会话(Session)等。
2. 用户在此后的访问过程中,不再需要重复进行身份认证,因为CAS服务端已经颁发了有效的票据,客户端可以使用该ST进行单点登入。
cas标准(一)

cas标准(一)CAS标准什么是CAS标准?CAS标准是指Central Authentication Service(中央认证服务)的标准规范。
它是一种单点登录协议,用于处理用户的身份验证和对受保护资源的授权。
CAS标准是由耶鲁大学发起的开源项目,在全球范围内得到广泛应用。
它提供了一个统一的认证系统,允许用户仅通过一次登录,即可访问多个受保护的应用程序。
CAS标准的特点CAS标准具有以下特点:1.单点登录:用户只需登录一次,即可访问所有受保护的应用程序,无需再次输入用户名和密码。
2.安全性:CAS使用令牌来验证用户身份,令牌在认证服务器和应用程序之间进行传递,确保用户信息的安全性。
3.可扩展性:CAS标准支持插件扩展,可以与其他认证系统集成,如LDAP、Active Directory等。
4.跨平台:CAS可以在不同的操作系统和开发框架中使用,如Java、.NET、PHP等。
CAS标准的工作流程CAS标准的工作流程如下:1.用户访问受保护的应用程序,并尚未登录。
2.应用程序检测到用户未登录,将用户重定向至CAS认证服务器。
3.用户在CAS认证服务器上输入用户名和密码进行登录。
4.CAS认证服务器验证用户的身份,若验证成功,生成一个令牌。
5.CAS认证服务器将令牌发送给应用程序。
6.应用程序接收到令牌,使用令牌向CAS认证服务器请求用户的属性信息。
7.CAS认证服务器使用令牌检索用户的属性信息,并将其返回给应用程序。
8.应用程序使用用户的属性信息进行授权操作。
CAS标准的应用场景CAS标准广泛用于以下场景:1.高校教育系统:学生、教职工可以通过CAS进行登录,并访问学校内部的资源管理系统、图书馆系统等。
2.企事业单位:公司员工可以通过CAS登录,访问OA系统、财务系统等。
3.社交网络:用户可以通过CAS登录,访问多个社交网络平台,并实现账号互联。
CAS标准的优势使用CAS标准的优势体现在以下方面:1.用户体验优化:CAS实现了单点登录,用户只需一次登录即可访问多个应用程序,提升了用户的便利性和使用体验。
基于CAS的高校智慧校园统一身份认证平台的研究与实现

基于CAS的高校智慧校园统一身份认证平台的研究与实现作者:汤其妹来源:《电脑知识与技术》2020年第11期摘要:CAS(Central Authentication Service)可以为Web应用系统提供一种可靠的单点登录方法,应用该方法实现了一个统一身份认证系统,使用户在访问多个相互信任的应用系统时,只需要进行一次统一身份验证过程,而不必重复登录验证,大大简化了用户访问网络资源的过程。
特别适用于高校这种业务系统众多且分散在各个部门的情况。
该文从CAS原理、认证流程、实现方式进行了阐述,在CAS部署方面就Server端和Client端分别给出具体的实现方法与详细步骤。
其研究结果对于当前高校信息化建设和发展具有一定的实践意义。
关键词:统一身份认证;CAS;智慧校园;单点登录中图分类号:G642 文献标识码:A1概述近年来随着网络技术的飞速发展,特别是Web应用系统的流行,高校很多二级部门都针对本部门的业务开发了多个业务应用系统,但大多数仍采用传统的身份认证方式,即每个应用系统都有各自独立的身份认证,这种开发模式不仅造成重复开发,还严重影响到应用系统的性能及用户使用的方便性。
为了解决这些问题,建立一套统一身份认证系统迫在眉睫。
使用统一身份认证系统,用户只需要输入一次用户名和密码信息,验证成功后再访问系统中的其他资源时无须重复登录。
本文基于CAS(Central Authentication SeIvice)实现了统一身份认证系统,为多个相互信任的应用系统提供认证服务的接口,提高了系统的方便性和可操作性,并确保用户数据信息的隐私和安全。
CAS框架通过Java开发实现,为Web身份验证提供了解决方案,另外CAS为开源项目,可以方便地对源代码进行修改从而适应各高校的个性化需求。
2单点登录及CAS框架介绍单点登录和CAS框架是实现统一身份认证平台的关键技术。
本小节重点介绍单点登录、CAS框架的原理及认证流程,并阐述相比较早期登录技术的优势。
统一身份认证平台集成接口文档

三峡大学统一身份认证平台接口文档目录1.统一身份认证简介 (3)1.1 背景知识 (3)1.1.1 什么是单点登录(Single Sign On): (3)1.1.2 中心认证服务的设计愿景: (3)1.2 CAS的实现 (4)系统中的用到的凭证(ticket): (5)2.JAVA语言 (6)2.1 CAS简单登陆的实现 (6)2.2 CAS登出 (12)3.PHP语言 (13)3.1 CAS单点登录测试环境搭建步骤 (13)3.1.1 获取必要的驱动程序: (13)3.1.2 搭建php运行环境 (13)3.1.3 配置PHP cas 客户端测试程序 (13)3.2 PHP-CAS客户端 (14)3.2.1 cas-client的初始化 (14)3.2.2 设置不是SSL的CAS认证 (16)3.2.3 进行CAS认证 (17)3.2.4 登出 (20)语言 (22)4.1 搭建环境 (22)4.2 CAS简单登陆实现 (22)4.3 CAS登出实现 (23)5.ASP语言 (24)5.1 CAS简单登录实现 (24)5.2 CAS登出实现 (25)6.附录 (26)6.1 附录1 (26)6.2 附录2 (28)6.3 附录3 (30)6.4 附录4 (31)6.5 附录5 (32)1.统一身份认证简介1.1背景知识1.1.1 什么是单点登录(Single Sign On):所谓单点登录是指基于用户/会话认证的一个过程,用户只需一次性提供凭证(仅一次登录),就可以访问多个应用。
目前单点登录主要基于Web的多种应用程序,即通过浏览器实现对多个B/S架构应用的统一账户认证。
1.1.2 中心认证服务的设计愿景:简单的说,中心认证服务(Central Authentication Service 缩写:CAS)的目的就是使分布在一个企业内部各个不同异构系统的认证工作集中在一起,通过一个公用的认证系统统一管理和验证用户的身份,一般我们称之为统一身份认证平台。
统一身份认证(CAS)简单说明与设计方案

统一身份认证()简单说明与设计方案(转)1. 单点登录概述所谓单点登录(),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,仅仅一次。
解决方案(比如,)负责统一认证用户,如果需要,也可以完成用户的授权处理。
可以看出,当企业用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。
在实施后,所用的认证操作都将交给认证中心。
现有的解决方案非常多,比如微软的便是典型的解决方案,各容器都提供了自身的专有能力。
2. 的总体架构1. 简介(中央认证服务)是建立在非常开放的协议之上的企业级解决方案。
诞生于2001年,在2002年发布了2.0协议,这一新的协议提供了(代理)能力,此时的2.0支持多层能力。
到2005年,成为了旗下的重要子项目。
由于2.0版本的可扩展能力不是非常完美,而且他的架构设计也不是很卓越,为了使得能够适用于更多场合,打算开发出同时遵循1.0和2.0协议的3版本。
现在的3全面拥抱技术,比如容器和技术、、、等。
通常,3由两部分内容构成:3服务器和客户端。
由于2.0协议借助于数据结构与客户进行交互,因此开发者可以使用各种语言编写的3客户与服务器进行通信。
3服务器采用纯开发而成,它要求目标运行环境实现了2.4+规范、提供 1.4+支持。
如果宿主3服务器的目标容器仅仅实现了2.3-规范,则在对3服务器进行少量的改造后,3也能运行其中。
运行时,3服务器仅仅是一个简单的应用,使用者只需要将直接丢到目标容器后,即完成了3的部署。
2. 词汇概念( ) 受权的票据证明( ) 密钥发放中心() 服务票据,由的发放。
任何一台都需要拥有一张有效的才能访问域内部的应用() 。
如果能正确接收,说明在之间的信任关系已经被正确建立起来,通常为一张数字加密的证书() 票据授权票据,由的发放。
即获取这样一张票据后,以后申请各种其他服务票据() 便不必再向提交身份认证信息( 准确术语是) 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因此,对于拥有多个业务系统应用需求的政府、企业或机构等,需要配置一套统一的身份认证系统,以实现集中统一的身份认证,并减少信息化系统的成本。单点登录系统的目的就是为这样的应用系统提供集中统一的身份认证,实现“一点登录、多点漫游、即插即用、应用无关”的目标,方便用户使用。
二、CAS简介
CAS的设计目标
(1)为多个Web应用提供单点登录基础设施,同时可以为非Web应用但拥有Web前端的功能服务提供单点登录的功能;
(2)简化应用认证用户身份的流程;
(3)将用户身份认证集中于单一的Web应用,让用户简化他们的密码管理,从而提高安全性;而且,当应用需要修改身份验证的业务逻辑时,不需要到处修改代码。
CAS(Central Authentication Service),是耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持代理功能。CAS系统在各个大学如耶鲁大学、加州大学、剑桥大学、香港科技大学等得到应用。Spring Framework的Acegi安全系统支持CAS,并提供了易于使用的方案。Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。Acegi安全系统在国内外得到了广泛的应用,有着良好的社区环境。
1、每个系统都开发各自的身份认证系统,这将造成资源的浪费,消耗开发成本,并延缓开发进度;
2、多个身份认证系统会增加系统的管理工作成本;
3、用户需要记忆多个帐户和口令,使用极为不便,同时由于用户口令遗忘而导致的支持费用不断上涨;
4、无法实现统一认证和授权,多个身份认证系统使安全策略必须逐个在不同的系统内进行设置,因而造成修改策略的进度可能跟不上策略的变化;
</init-param>
4)、启动tomcat,验证
1.2Tomcat(https)
1)、将deployerConfigContext.xml中的p:requireSecure参数设为true。
CAS的实现原理
CAS(Central Authentication Server)被设计成一个独立的Web应用。它目前的实现是运行在HTTPS服务器的几个Java Servlet上(而客户端可以灵活采用http和https的方式)。
CAS创建一个位数很长的随机数(ticket)。CAS把这个ticket和成功登录的用户以及用户要访问的service联系起来。例如,如果用户peon重定向自service S,CAS创建ticket T,这个ticket T允许peon访问service S。这个ticket是个一次性的凭证;它仅仅用于peon和仅仅用于service S,并且只能使用一次,使用之后马上会过期,即ticket通过验证,CAS立即删除该ticket,使它以后不能再使用。这样可以保证其安全性。关于ST,在取一个ST时,即使用deleteTicket(ticketId)同时将一次性的ST删除;而对于TGT或PT,则通过resetTimer(ticketId)以更新TGT或PT的时间。在CAS服务端返回的ST中只能得出用户名。
注:
(1)、文件的内容及web.xml见实际文件
(2)、web.xml中,serverName的参数值为cas客户端(应用服务器)的地址。
<init-param>
<param-name>
<param-value>localhost:8080</param-value>
下载地址:/
三、统一认证配置实现
1、基础套件
cas-server-3.4.11
spring3
hibernate3(可选)
dbcp(数据库连接池,可选)
slf4j(log4j)
2、概念
1)、通道安全性
图:非ssl(HTTP)
图:ssl(HTTPS)
单向认证:传输的数据经过加密,但不会校验客户端的来源
双向认证:传输的数据经过加密,并需要校验客户端。如果客户端浏览器没有导入客户端证书,则访问不了web系统。
2)、CAS服务端
3)、CAS客户端
4)、应用服务端
5)、客户端
3、配置实现
1.1Tomcat(http)
1)、修改配置
将cas-server-webapp-3.4.11.war解压成cas:
图1
一、背景描述
随着信息化的迅猛发展,政府、企业、机构等不断增加基于Internet/Intranet的业务系统,如各类网上申报系统,网上审批系统,OA系统等。系统的业务性质,一般都要求实现用户管理、身份认证、授权等必不可少的安全措施,而新系统的涌现,在与已有系统的集成或融合上,特别是针对相同的用户群,会带来以下的问题:
图4
定位warnCookieGenerator.xml,将cookieSecure设为false,即不启用ssl。
图5
2)、发布:将cas文件夹拷至tomcat的wabapps下
3)、开发2个应用,验证单点登录的有效性
创建名为webdemo1和webdemo2的2个工程应用,2工程应用下各有一个jspdemo.jsp,jsp页面中增加一链接,链接实现工程间的相互切换,然后将cas-client-core-3.2.1.jar、commons-logging-1.1.jar拷到工程的lib目录下。
在默认情况下,只要用户名和密码是一样的,就可以登录,因此需要根据实际情况作调整。大多数情况下,应用都将用户信息存放于数据库中,数据库中的用户密码也可能是经过加密的。
定位deployerConfigContext.xml,修改认证逻辑,如下图所示:
图2
图3
定位ticketGrantingTicketCookieGenerator.xml,将cookieSecure设为false,即不启用ssl。