CAS票据验证失败一例
2015-08-23 19:46
316 查看
最近在弄cas的集成,搞了好几天,被一个问题搞得很郁闷,今天总算是解决了,在此记录一下解决的过程。
先说一下cas的背景,我们知道cas分为服务端和客户端,认证的过程是
1. 用户访问客户端应用,被拦截跳转到cas服务端登录
2. 登录完成后,服务端签发一个TGC,把TGC的ID写到客户端的cookie,并再次跳转到客户端,同时带着ST票据
3. 客户端发现有ST则拿着ST去服务端验证,如果验证通过,则返回用户名
4. 客户端发现用户名,则登录成功
5. 用户访问另一个客户端,也被拦截,跳转到cas服务端,服务端发现有TGC的cookie,就直接验证,如果验证通过,则直接签发一个ST票据给客户端,后面流程就和上面一样了。
项目背景是原来一个公司K的cas服务端3.5和他们公司的一个.net的应用A集成是正常的,现在另一家公司插入进来换掉了cas服务端,用的是cas4.0,想和应用A集成,却发现一直集成不了。而他们和其它公司的.net系统集成都正常。最后叫我帮忙处理。
我按照常规的方法去集成,发现cas服务端能签发ST出来,但是A系统一直报错说无效票据,因为我是搞java的,不太清楚.net,所以也没法看代码,只能凭经验来判断问题。
首先我觉得cas能签发票据,说明登录成功了,我于是弄了一个java的应用来接入,发现接入正常,可以实现单点登录。这下就奇怪了,难道A应用的客户端有问题?于是我找到K公司的应用A(是部署在另一个客户那的,我是K公司出来的,和原同事熟,所以弄了个测试应用来接入测试),试着接入,发现报一样的错,这说明客户端的部署没问题,难道A应用的客户端被改过,不是标准客户端?于是我问原来的同事,他们都说没有改过,这下陷入僵局。
第二天我想不如我自己部署一个cas来测试,有可能是对方cas服务器有问题,于是我下载了一个cas4.0,部署到我的机器上,用花生壳软件发布到外网,然后先用我的java应用接入测试, 一切正常,于是把A系统接入进来,又是票据无效!!!这下懵了,什么情况,难道是cas版本问题?我不服,于是又下了一个cas3.5再试,还是票据无效!!!
我冷静的想了想,票据能签发成功,验证失败了,票据无效是系统A报出来的,cas服务端没有任何报错信息,一定要去看系统A的源代码看是什么情况,于是我在网上找了一个dll的反编译工具Reflector, 把系统A的客户端dll下载过来反编译看,发现是去服务端验证的时候没有返回回来用户名,把系统A抛出了票据无效的错误。
这时候我突然想到一个问题,我自己的java系统是有安装证书的,但是系统A那边没有安装证书,问原来同事都说不用安装证书,但是K公司的cas服务端用的是http协议,而现在我这边cas和新公司的cas服务端都是用的https协议,使用https应该是需要证书的,是不是因为没有证书的问题导致票据验证失败?
于是我试着把我的cas服务端改成http协议,再测试,一切顺利,原来真是证书的问题,也就是说如果使用https,那边客户端要安装证书,如果使用http,则不用证书。
至此问题解决, 我叫对方公司把他们的服务端改成http,或者签发一个证书给系统A。
先说一下cas的背景,我们知道cas分为服务端和客户端,认证的过程是
1. 用户访问客户端应用,被拦截跳转到cas服务端登录
2. 登录完成后,服务端签发一个TGC,把TGC的ID写到客户端的cookie,并再次跳转到客户端,同时带着ST票据
3. 客户端发现有ST则拿着ST去服务端验证,如果验证通过,则返回用户名
4. 客户端发现用户名,则登录成功
5. 用户访问另一个客户端,也被拦截,跳转到cas服务端,服务端发现有TGC的cookie,就直接验证,如果验证通过,则直接签发一个ST票据给客户端,后面流程就和上面一样了。
项目背景是原来一个公司K的cas服务端3.5和他们公司的一个.net的应用A集成是正常的,现在另一家公司插入进来换掉了cas服务端,用的是cas4.0,想和应用A集成,却发现一直集成不了。而他们和其它公司的.net系统集成都正常。最后叫我帮忙处理。
我按照常规的方法去集成,发现cas服务端能签发ST出来,但是A系统一直报错说无效票据,因为我是搞java的,不太清楚.net,所以也没法看代码,只能凭经验来判断问题。
首先我觉得cas能签发票据,说明登录成功了,我于是弄了一个java的应用来接入,发现接入正常,可以实现单点登录。这下就奇怪了,难道A应用的客户端有问题?于是我找到K公司的应用A(是部署在另一个客户那的,我是K公司出来的,和原同事熟,所以弄了个测试应用来接入测试),试着接入,发现报一样的错,这说明客户端的部署没问题,难道A应用的客户端被改过,不是标准客户端?于是我问原来的同事,他们都说没有改过,这下陷入僵局。
第二天我想不如我自己部署一个cas来测试,有可能是对方cas服务器有问题,于是我下载了一个cas4.0,部署到我的机器上,用花生壳软件发布到外网,然后先用我的java应用接入测试, 一切正常,于是把A系统接入进来,又是票据无效!!!这下懵了,什么情况,难道是cas版本问题?我不服,于是又下了一个cas3.5再试,还是票据无效!!!
我冷静的想了想,票据能签发成功,验证失败了,票据无效是系统A报出来的,cas服务端没有任何报错信息,一定要去看系统A的源代码看是什么情况,于是我在网上找了一个dll的反编译工具Reflector, 把系统A的客户端dll下载过来反编译看,发现是去服务端验证的时候没有返回回来用户名,把系统A抛出了票据无效的错误。
这时候我突然想到一个问题,我自己的java系统是有安装证书的,但是系统A那边没有安装证书,问原来同事都说不用安装证书,但是K公司的cas服务端用的是http协议,而现在我这边cas和新公司的cas服务端都是用的https协议,使用https应该是需要证书的,是不是因为没有证书的问题导致票据验证失败?
于是我试着把我的cas服务端改成http协议,再测试,一切顺利,原来真是证书的问题,也就是说如果使用https,那边客户端要安装证书,如果使用http,则不用证书。
至此问题解决, 我叫对方公司把他们的服务端改成http,或者签发一个证书给系统A。
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议138:事件和委托变量使用动词或形容词短语命名
- 简单卡尔曼滤波
- 张国祥老师在宁波麒麟贸易集团公司讲授三级流程设计方法
- 摘记
- HDU 1041
- Oracle数据库基础之字符串函数
- iOS项目开发实战——学会使用TableView列表控件(二)
- HDU_2795 Billboard(线段树)
- Java内存问题的一些见解
- 自学QT之QListIterator迭代器的示例
- 如何快速掌握一门新技术/语言/框架…
- css选择器
- 【Spring】初始化Spring IoC容器(非Web应用),并获取Bean
- session的方法
- Linux学习笔记――Linux基础命令总结
- 为什么你应该尝试“全栈”
- 杭电acm 1072 Nightmare
- DNA Sequence - POJ 2778(AC自动机+矩阵乘法)
- block使用小结、在arc中使用block、如何防止循环引用
- HttpGet/HttpPost/HttpClient介绍