最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程
涉及的关键知识点:
1、jquery ajax跨域重定向,要理ajax解跨域重定向,先要了解浏览器对重定向的处理。正常我们请求一个地址,如果server返回302,那么浏览器会再发起 一次重定向后的http请求;用jquery ajax发起一次异步请求,server返回302,如果重定后url的域名跟ajax请求的域名是同一个域名的话,浏览器会再发起一次重定向后的 http请求,请求成功会调用ajax的success函数,如果重定向后url的域名跟ajax请求的域名不是同一个域名,也就是跨域重定向(跨域 redirect),这个时候浏览器看到返回的response的Location跨域了就不会再发起请求,请求被拦截了,ajax请求失败会调用 error方法
那么如果我们非要做跨域重定向呢?这也是可以实现的,普通的ajax请求不行,我们需要 通过jsonp的方式,而且需要设置crossDomain:true,可以参考https://api.jquery.com/jQuery.ajax / 关于jquery.ajax方法的crossDomain 参数的说明
跨域redirect实例:
test.html
- <script src="jquery.js"></script>
- <script type="text/javascript">
- var res=$.ajax({
- type:"get",
- dataType:"jsonp",/*-----------------------*/
- url: "http://api.luojisiwei-inc.com/test/test.php?callback=?",
- crossDomain:true,/*-----------------------*/
- success: function(data){
- alert("success:"+data.name);
- },
- beforeSend:function(){
- },
- complete:function(data,status){
- }
- });
- </script>
跟test.html同域名下的test.php
- <?php
- header("Location:http://video.luojisiwei-inc.com/");//跨域重定向
http://video.luojisiwei-inc.com/index.php
- echo "aaaaaaaaaa";
- setcookie("vtest","ooooooooooo");//跨域设置cookie
- die;
访问test.html,在firebug下看到请求的结果
客户端先给test.php发ajax请求,然后被重定向到http://video.luojisiwei-inc.com下,并且返回一个Set-Cookie的Response,这样就实现了跨域重定向和跨域设置Cookie
然后浏览器中访问http://video.luojisiwei-inc.com,发现该域名下确实有了个叫vtest的Cookie
京东商城跨域设置Cookie实现SSO单点登陆过程
1、点击首页的登陆按钮跳转到京东的登陆中心https://passport.jd.com/new /login.aspx?ReturnUrl=http%3A%2F%2Fwww.jd.com%2F,然后输入用户名、密码验证,验证通过跳转到 ReturnUrl指定的地址,也就是京东首页
2、首页通过Jquery.getJSON()方法发起http://passport.jd.com/new/helloService.ashx请求,跨域获取需要跨域设置登陆cookie的应用列表,返回一个Json数据
3、js遍历sso,通过jQuery.ajax()方法对其中的每条数据发起跨域的jsonp请求,我猜测京东的js代码大概是这么写的
- <script type="text/javascript">
- $.ajax({
- type:"get",
- dataType:"jsonp",/*-----------------------*/
- url: "http://sso.jd.com/setCookie?t=sso.minitiao.com&callback=?",/*-----------------------*/
- crossDomain:true,/*-----------------------*/
- success: function(data){
- },
- beforeSend:function(){
- },
- complete:function(data,status){
- }
- });
- </script>
请求的结果是这样的:
可以看到返回一个重定向的Response,而且是跨域的重定向,由于发起的是跨域的jsonp请求,所以浏览器会根据返回的重定向url发起一次请求,也就是最后的跨域设置Cookie的请求
4、浏览器发起sign请求跨域设置Cookie,请求和返回结果如下
返回的Response header中含有Set-Cookie项,这样就在sso.minitiao.com域名下设置了Cookie,可以打开sso.minitiao.com发现确实有了ceshi3.com这样一个Cookie
5、至此京东就完成了单点登录的全过程
http://blog.csdn.net/clh604/article/details/20365967/
相关推荐
SSO 单点登录(Single Sign On)的简称, SSO是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
sso单点登录ppt.ppt
实现实现跨域的SSO单点登录的例子,里面还有解决方案
sso单点登录源代码sso单点登录源代码sso单点登录源代码sso单点登录源代码sso单点登录源代码
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
简单实用的sso】的单点登录的实例 简单易懂 方便快捷 欢迎分享使用
本文除了从多个方面和角度给出了对单点登录(SSO)的全面分析,还并且讨论了如何将现有的应用和SSO服务结合起来,能够帮助应用架构师和系统分析人员从本质上认识单点登录,从而更好地设计出符合需要的安全架构。
ASP.NET跨域单点登录源码 asp.net 跨域单点登录实现原理: 当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录; 根据用户提供的登录信息,认证系统进行身份效验,如果 通过效验,...
利用springMvc 实现的简单的单点登录Demo,内含三个小Mavn项目分别是 1、认证中心SSOServer 2、子系统1SSOClient1 3、子系统2SSOClient2 文章请参考 http://blog.csdn.net/qq_31183297/article/details/79419222
SSO单点登录【基于cookie二级域名下跨域共享】的简单实现。
SSO完整版,采用服务端和客户端结合跨域。适合demo,改造可适用企业级。
单点登录跨域iframe互相通信方案 ,内含详细步骤,可以实现不同源的域名互相通信。亲测,可用哦。也可以到我的博客查看具体操作步骤。
SSO单点登录解决方案,包括HP灵动单点登录系统演示文件和其他的资料文件
baigo SSO单点登录系统 v3.0.1更新日志 增加数据清理功能 baigo SSO单点登录系统简介 baigo SSO 是一款基于 HTTP 协议的单点登录系统,baigo SSO 以简单为设计、开发的宗旨,安装部署简单、使用简单。baigo SSO ...
一个实现SSO方案的构想SSO单点登陆解决方案
redmine本身没有提供单点登录功能,这个插件可以提供redmine的单点登录。解压后将这两个文件放置在redmine目录的plugins目录中。具体操作参照README.md。每个解压文件中都有个EADME.md
sso单点登录demo,集成shiro 完美实现单点登录demo,共享session