单点登陆框架CAS的研究
CAS作为开源的单点登陆框架已经非常的流行了。由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注;也是很多公司将之作为单点登陆的首选框架。关于CAS如何搭建的文章,网上已经非常多了,随便搜搜都一大堆。我也就不再写些重复的东西了,但是网上的东西有时候常常是不全,或版本问题搞的很多人都很迷糊。我曾经也很迷糊,如果刚接触CAS,请你继续往下看;如果你是CAS高手,请指正我说错的地方。
CAS最早是耶鲁大学开发的(CAS2.0以前的版本),后来开源出来由JASIG来继续开发(CAS2.0以后的版本)。所以,当你准备那某一片文章上手练习的时候请分清版本。个人建议还是阅读JASIG官方文档比较好。https://wiki.jasig.org/display/CASC
一个完整的单点登陆方案分两部分
CAS server
CAS server如何配置就不多说了,基本的步骤就是
1. 下载CAS server包
2. 配置Tomcat的Https访问设置
3. 部署CAS server,其实就是将.war文件拷贝到Tomcat目录下
4. 生成证书(可以买,也可以使用自签名证书,或者干脆就用http协议,那就不需要证书了)
5. 修改用户访问配置(CAS支持关系数据库,LDAP等多种数据存储)
CAS client
CAS client是部署在应用端的,因为通常单点登陆都会涉及到对已有系统的改造。所以,client端的侵入性就变的很重要。侵入性越小,越容易部署和测试。CAS框架的优点之一就在于它的client端对应用系统的侵入性比较小。对于Java的Web项目来说,你只需要在web.xml里面添加一个filter,拷贝CAS client的jar包到应用系统,然后改造登陆认证过程即可。如果CAS server用的是Https,那就还需要将证书导入到JVM的可信证书域中,通常是($JAVA_HOME/lib/security/cacerts)。
所有的一切看着都挺简单的,但实际部署中你会遇到各式各样的问题。有很多问题网上都有人解答,这里我就记录一下我遇到的一个没找到答案的问题?
现象:
当你配置完CAS server, 也部署了CAS client后。用https登陆CAS server也都没问题时,而你无论如何都无法在登陆后跳转到你期待的页面。尽管一切看起来都配置对了,证书也导了,https也配了,filter也加了。但是还是不停的抛CAS ticket validation expection, CAS server no response错误。
解决方案:
请检查你的client是否把4个filter都配置全了,并且顺序要对。
<!-- CAS SSO --><filter><filter-name>CAS Authentication Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://cas-server:8443/cas/login</param-value></init-param><init-param><param-name>renew</param-name><param-value>false</param-value></init-param><init-param><param-name>gateway</param-name><param-value>false</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://client-host:8080</param-value></init-param></filter><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://cas-server:8443/cas/</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://client-host:8080</param-value></init-param><init-param><param-name>useSession</param-name><param-value>true</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param></filter><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><filter><filter-name>CAS Assertion Thread Local Filter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>CAS Authentication Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping>
官方文档特别说明这4个Filter是必须的
The correct order of the filters in web.xml is necessary:
- AuthenticationFilter
- TicketValidationFilter (whichever one is chosen)
- HttpServletRequestWrapperFilter
- AssertionThreadLocalFilter
这里我要说明一下为什么这4个filter是必须要配的。
AuthenticationFilter的作用是用于拦截SSO登陆请求的,当你提交的request符合SSO登陆规则,CAS client会通过这个filter将登陆请求转向到CAS server的登陆界面。因为这是第一步,所以它要在最上面。
TicketValidationFilter的作用是用于拦截登陆返回的跳转请求的。当CAS server确认登陆用户名密码后,会返回一个server ticket,这个ticket会由应用服务器上的CAS client再送回CAS server进行验证,用于防止仿冒攻击的。
HttpServletRequestWrapperFilter的目的是将CAS server返回的信息封装到Http request里面,这样客户端就可以用request.getRemoteUser()来获取用户名等信息了。
AssertionThreadLocalFilter的作用是用于前端程序(通常是前端脚本程序)访问,因为这个时候你无法通过request来获取信息。
所以如果这4个filter不配置正确,就会报各种错误。
单点登陆框架CAS的研究相关推荐
- CAS使用账号密码实现单点登陆
CAS使用账号密码实现单点登陆 CAS单点登陆框架 项目需求 实现思路 1.使用用户名密码获取TGT 2.根据TGT和Service获取ST 3.使用ST访问目标资源 Java代码实现 CAS单点登陆 ...
- sso单点登陆实现过程汇总记录
前言 在早期,项目规模不大的时候,企业中存在的系统不多,通常为1或者2个.每个系统都有自己独立的登陆模块,这样用户进行登陆也不是特别麻烦,分别进行登陆就可以了.但是随着企业规模不断变大,随之而然的系统 ...
- mysql sd5加密语句_CAS原理与配置-基于CAS的单点登陆的研究(上)
1 前言 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任 ...
- CAS单点登陆原理简介及环境搭建
前言 最近这几天在研究CAS 今天终于在本地部署成功了 今天写一篇文章记录下 原理简介 SSO单点登录 在多个相互信任的系统中,用户只需要登录一次就可以访问其他受信任的系统. 新浪微博与新浪博客是相互 ...
- PHP使用phpCAS对接CAS单点登陆系统
PHP使用phpCAS对接CAS单点登陆系统 综述 `CAS`单点登陆原理 搭建`CAS SSO`SERVER服务端 下载`phpCAS`客户端 phpCAS客户端配置 PHP开发对接 注意 综述 本 ...
- cas单点登陆。就这一篇就够了!!!!!
前言: cas是什么我就不累赘说了.就简单说下大致的流程.首先,cas是一个独立的项目.就是一个war包,部署在tomcat上面启动就ok.然后我们要实现单点登陆,无疑是访问系统1,如果没有登录,就跳 ...
- cas单点登陆系统-casServer搭建
最近工作比较忙,空闲的时间在搞单点登陆系统,自己写了一套SSO在GitHub上,过程走通了.通过这个例子,自己熟悉了流程,而且破天荒的使用了抽象设计模式,并且熟悉了cookies和session的使用 ...
- Java架构-CAS SSO单点登录框架介绍
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: User(多个) Web 应用(多个) SSO ...
- CAS单点登录框架使用
CAS单点登录框架使用 CAS Server 1.GitHub上下载项目 https://github.com/apereo/cas-overlay-template/tree/5.3 5.3之后的都 ...
最新文章
- Opencv2.4.4示例程序说明
- 设计模式 — 行为型模式 — 访问者模式
- 线性表的C/C++实现(数据结构 严蔚敏版)
- python array 使用创建10万浮点数
- hibernate3.6.0日志配置
- 做网络需要掌握的56句话
- java cropper 上传_java web 网站头像上传处理 (springmvc +bootstrap+cropper)
- oracle 9207-gt;9208(HPUX,RAC)
- 设定所有tableView中cell的分隔线颜色
- Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
- 从零开始--系统深入学习IOS(使用Swift---带链接)
- 计算机二级java邓伦单_2010年3月计算机等级考试二级Java笔试试题(文字版)
- VB.NET实现Windows剪贴板监视器
- idea创建vue模板
- macd ema java源码_[转载]彩色MACD指标源码
- SSH基础:ssh首次连接的公钥认证
- 制作Windows PE启动镜像命令
- 手机注册服务器异常是什么问题,ohho注册不了网络异常
- 华为设备无线环境中的MAC认证
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
热门文章
- Linux下crontab命令的用法
- Excel有用的函数(ISBLANK,IF,LEFT,VALUE)
- inkscape 无法打开文档属性
- mac无法访问samba共享 提示输入用户名密码
- php页面get方法实现ajax,入门实例教程
- 《linux文件权限管理大总结》RHEL6
- Bloom Filter(布隆过滤器)的概念和原理
- 求出100~200之间的素数
- 关于解决DevExpress用DevExpress patch工具破解后经常弹出试用框的问题
- JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome