概念介绍

1.定义

CAS ( CentralAuthentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 WebSSO )。

2.结构体系

从结构体系看, CAS 包括两部分: CAS Server 和 CAS Client 。

CAS Server 负责完成对用户的认证工作 , 需要独立部署 , CAS Server 会处理用户名 / 密码等凭证(Credentials) 。

CASClient负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

3.基础模式

基础模式 SSO 访问流程主要有以下步骤:

(1)访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

(2)定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

(3)用户认证:用户身份认证。

(4)发放票据: SSO 服务器会产生一个随机的 Service Ticket 。

(5)验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

(6)传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

简单实现

为了方便我就在一台电脑上进行演示了。可以把Server和Client放在不同的电脑上进行演示。

1.准备工作

(1)下载:

CAS-Server:http://www.jasig.org/cas/download

CAS-Client:http://downloads.jasig.org/cas-clients/

(2)准备三个Tomcat。

把Server端和Client端放在不同的Tomcat中。分别为Tomcat-cas,Tomcat-client1和Tomcat-client2。因为用了三个Tomcat需要都启动起来,所以需要先修改一下Tomcat的端口号以防冲突。

2.部署CAS-Server相关的Tomcat

(1)把Server包中的cas-server-webapp部署到tomcat下。

(2)更改协议

CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要进行证书的生成等一系列操作。我们项目中使用的是http协议,所以就不用进行这些证书的验证。

但是需要修改配置文件,让它可以使用http协议进行访问。

修改cas-server-webapp/WEB-INF中deployerConfigContext.xml文件。

增加参数p:requireSecure="false"。

  1. <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
  2. p:httpClient-ref="httpClient"
  3. p:requireSecure="false"/>

修改cas-server-webapp/WEB-INF/spring-configuration中的ticketGrantingTicketCookieGenerator.xml

P:cookieSecure 属性 修改为 false。

  1. <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
  2. p:cookieSecure="false"
  3. p:cookieMaxAge="-1"
  4. p:cookieName="CASTGC"
  5. p:cookiePath="/cas" />

(3)启动tomcat-cas,测试服务的端是否可以正常使用。在浏览器中输入:http://localhost:8080/cas/login


可以正常使用。

3.部署CAS-Client相关的Tomcat

(1)准备好一个项目做客户端的演示,部署到Tomcat-client1中。(刚开始我随便建立一个项目,直接用index.jsp做测试没有成功,后来才知道原来只有受保护的资源访问的时候才能跳转到登陆页。)

(2)从cas-client-3.2.0-release.zip中找到cas-client-core-3.2.1.jar,commons-logging-1.1.jar放到Tomcat-client1/webapps/cas_test/WEB-INF/lib中。

(3)在Tomcat-client1/webapps/cas_test/WEB-INF/web.xml中增加如下内容。

  1. ========================单点登录开始 ========================-->
  2. <listener>
  3. <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
  4. </listener>
  5. <!--该过滤器用于实现单点登出功能,可选配置。-->
  6. <filter>
  7. <filter-name>CASSingle Sign OutFilter</filter-name>
  8. <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>CASSingle Sign Out Filter</filter-name>
  12. <url-pattern>/*</url-pattern>
  13. </filter-mapping>
  14. <filter>
  15. <filter-name>CASFilter</filter-name>
  16. <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
  17. <init-param>
  18. <param-name>casServerLoginUrl</param-name>
  19. <param-value>https://localhost:8080/cas/login</param-value>
  20. </init-param>
  21. <init-param>
  22. <param-name>serverName</param-name>
  23. <param-value>http://localhost:18080</param-value>
  24. </init-param>
  25. </filter>
  26. <filter-mapping>
  27. <filter-name>CASFilter</filter-name>
  28. <url-pattern>/*</url-pattern>
  29. </filter-mapping>
  30. <!--该过滤器负责对Ticket的校验工作,必须启用它-->
  31. <filter>
  32. <filter-name>CASValidationFilter</filter-name>
  33. <filter-class>
  34. org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  35. <init-param>
  36. <param-name>casServerUrlPrefix</param-name>
  37. <param-value>https://localhost:8080/cas</param-value>
  38. </init-param>
  39. <init-param>
  40. <param-name>serverName</param-name>
  41. <param-value>http://localhost:18080</param-value>
  42. </init-param>
  43. </filter>
  44. <filter-mapping>
  45. <filter-name>CASValidationFilter</filter-name>
  46. <url-pattern>/*</url-pattern>
  47. </filter-mapping>
  48. <!--
  49. <!-- ========================单点登录结束 ======================== -->

(4)把项目部署到Tomcat-client2上,同上操作。

(5)分别开启Tomcat-cas,Tomcat-client1和Tomcat-client2。

4.测试结果

访问client1的时候跳转到登陆页面,然后进行登陆就会跳转到要访问的页面。然后紧接着访问client2,直接就会跳转到要访问的页面,不用进行登陆。

在浏览器中打开第一个clent1的项目,会出现以下界面:


说明需要进行验证。验证通过以后出现下面界面:

然后打开client2项目,直接回出现下面界面。

说明测试成功。用户只需登录一次就可以访问所有相互信任的应用系统。

SSO基于cas的登录的更多相关文章

  1. SSO之CAS单点登录详细搭建教程

    本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...

  2. SSO之CAS单点登录实例演示

    本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...

  3. SSO 基于CAS实现单点登录 实例解析(二)

    本文目录: 概述 演示环境 部署CAS-Server相关的Tomcat 部署CAS-Client相关的Tomcat 测试验证SSO 第一: 本demo在一个机器上实现(三个虚拟主机),来看SSO单点登 ...

  4. SSO 基于Cookie+fliter实现单点登录 实例解析(一)

    接上文,SSO的理论讲解,接下来实践实践! 1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置 ...

  5. SSO之CAS备忘

    http://blog.chinaunix.net/uid-28380443-id-4740103.html 自己负责的公司基于CAS单点登录平台架构已经上线运行,很多细节的东西是时候备忘一下了,开源 ...

  6. SSO之CAS + LDAP

    本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤. 1. 依<SSO之安装CAS Server>所述安装好CAS Server.2. 安装ApacheDS.安装好ApacheDS后 ...

  7. 转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)

    电商平台中无论是前端还是后端会存在大量的业务应用,在整个交易的过程中请求是在各个业务应用中流转的,对于用户来讲只需要登录一次就可以访问所有的业务,这就是单点登录SSO. 单点登录开源有很多的解决方案, ...

  8. 基于CAS的SSO(单点登录)实例

    第一步 部署CAS-Server(服务端) 1.从CAS官方网站(http://developer.jasig.org/cas/)下载最新版本的CAS-Server(当前最新版本cas-server- ...

  9. 基于CAS实现单点登录(SSO):工作原理

    工作中使用到了SSO,网上看到了这个博客的一系列文章感觉不错,转载收藏 源地址http://blog.csdn.net/tch918/article/details/19930037 系列文章的第一篇 ...

随机推荐

  1. ubuntu下修改nginx的进程数

    1. 进入nginx配置文件:vim /etc/nginx/nginx.conf2. 将events下的worker_processes 修改为 你希望的数字,保存文件并退出3. 重启nginx: s ...

  2. lambda----jdk8重头戏

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  3. 开发简单的IO多路复用web框架

    自制web框架 1.核心IO多路复用部分 # -*- coding:utf-8 -*- import socket import select class Snow(): def __init__(s ...

  4. Final发布用户使用报告 -- Thunder团队

    Thunder爱阅app Final发布用户使用报告 用户数量:14人 以下为用户评论:(注:为了保护用户的姓名权,以下用户名以昵称形式给出.) 序列 昵称 个人信息 获得软件途径 使用次数 用户评论 ...

  5. 20172308 实验二《Java面向对象程序设计 》实验报告

    20172308 2017-2018-2 <程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王 ...

  6. “吃神么,买神么”的第三个Sprint冲刺总结

    第三阶段Spring的目标以及完成情况: 时间:6.16——6.26(10天) 目标:第三阶段主要是前台设计的修改完善,以及数据库成功连接,完成小部分功能 情况:前台界面完善,完成小部分功能(发布功能 ...

  7. BETA-6

    前言 我们居然又冲刺了·六 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 新方案代码比之前的更简单,但是对场景的要求相应变高了,已经实现,误差感人 代码 ...

  8. 使用node-webkit包装浏览器

    node-webkit简称nwjs:开源地址 https://github.com/nwjs/nw.js 参考博客 https://www.cnblogs.com/soaringEveryday/p/ ...

  9. IE盒模型与W3C盒模型区别

    前两天被人问到,叫我解释一下标准盒模型与IE盒模型,额,当时只能说,知道一点,但是没有深入的去探讨过,所以下来之后就自己写了例子,亲自去验证并且查看了网上的一些资料,现将其整理如下: 一.css盒模型 ...

  10. js 函数讲解

    函数 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 概述 函数的声明 函数的重复声明 圆括号运算符,return 语句和递归 第一等公民 函数名的提升 不能 ...