CAS利用Iframe框架跨域Ajax登录

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CAS利用Iframe框架跨域Ajax登录

因最近经常有时候被一些朋友问到关于CAS跨全域下的Ajax 登录方式实现,正好之前也分析Sina微博的SSO实现,文中也说了SINA 的SSO 实际上(或机制)直接使用了CAS 这个开源项目。于是本文中要说的CAS AJAX登录方式便参考了SINA 的AJAX登录实现。关于具体方案,CAS官方上好象没有提供相关说明,倒是有一文说到Without the Login Screen(详情参见CAS 之自定义登录页实践),其具体实现方式甚是麻烦,又是改源码,又是通过JS跳转,又是一堆配置。当然,虽然如此,但该文中所提到的获取login tikcet 的方式还是值的参考的,因为无论什么方式登录,前提是必须获取到该ticket才允许登录验证。

虽然这里所说的主要是针对CAS,其实具体的实现方式中有些还是值得参考的,如跨域设置cookie, jsonp + iframe 跨域异步请求、P3P 及关于spring webflow 等其它相关的一些信息。

思路

关于具体的实现思路基本上都是参考了SINA,所以详细信息可以在分析Sina微博的SSO实现看到或自己去firebug 一下sina micro-blog。

实践

Environment:

cas-server-3.4.2.1 :8080/cas/

cas-client-3.1.10 :8080/login

以上域名是方便测试跨域,故修改本机hosts。

由于原本的CAS 登录方式是通过跳转、重定向的方式实现,所以需要对CAS的Server端进行调整,使其同时支持Ajax 方式登录。

Step 4:测试,当登录失败后,是否在:8080/login 页中显示:8080/cas/ 中返回过来的error message; 当登录成功后,是否能进入登录成功后跳转的地址(:8080/uc/index):

进入:8080/login页:

可以看到,马上就会去向passport 中请求login ticket,也就是调用上面定义的函数flushLoginTicket() :

OK, 随便输入用户名密码,提交登录,测试时,我先把删除iframe 代码注释:

果如下:

另外,上面说到login ticket 只能使用一次,所以当登录失败后,会马上再次获取login ticket. 接下来,再测试一下登录OK的情况:

可以看到,后面的callback 实际上调用不调用已经没什么关系了,因为在之前已经进行了跳转。

相关文档
最新文档