当前位置: 首页 > news >正文

SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析

最近在研究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

 

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. <script src="jquery.js"></script>  
  2. <script type="text/javascript">  
  3. var res=$.ajax({  
  4.   type:"get",  
  5.   dataType:"jsonp",/*-----------------------*/  
  6.   url: "http://api.luojisiwei-inc.com/test/test.php?callback=?",  
  7.   crossDomain:true,/*-----------------------*/  
  8.   success: function(data){  
  9.                 alert("success:"+data.name);  
  10.           
  11.         },  
  12.   beforeSend:function(){  
  13.         },  
  14.   complete:function(data,status){  
  15.         }  
  16. });  
  17.   
  18. </script>  

跟test.html同域名下的test.php

 

 

[php]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. <?php  
  2. header("Location:http://video.luojisiwei-inc.com/");//跨域重定向  


http://video.luojisiwei-inc.com/index.php

 

 

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. echo "aaaaaaaaaa";  
  2. setcookie("vtest","ooooooooooo");//跨域设置cookie  
  3. 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单点登陆过程

可以先看下这边文章:http://blog.chinaunix.net/uid-25508399-id-3431705.html
 

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代码大概是这么写的

 

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. <script type="text/javascript">  
  2. $.ajax({  
  3.   type:"get",  
  4.   dataType:"jsonp",/*-----------------------*/  
  5.   url: "http://sso.jd.com/setCookie?t=sso.minitiao.com&callback=?",/*-----------------------*/  
  6.   crossDomain:true,/*-----------------------*/  
  7.   success: function(data){  
  8.         },  
  9.   beforeSend:function(){  
  10.         },  
  11.   complete:function(data,status){  
  12.         }  
  13. });  
  14.   
  15. </script>  

 

请求的结果是这样的:

可以看到返回一个重定向的Response,而且是跨域的重定向,由于发起的是跨域的jsonp请求,所以浏览器会根据返回的重定向url发起一次请求,也就是最后的跨域设置Cookie的请求

4、浏览器发起sign请求跨域设置Cookie,请求和返回结果如下

 

 

返回的Response header中含有Set-Cookie项,这样就在sso.minitiao.com域名下设置了Cookie,可以打开sso.minitiao.com发现确实有了ceshi3.com这样一个Cookie

 

5、至此京东就完成了单点登录的全过程

 

相关文章:

  • JS地毯式学习一
  • wordpress“建立数据库连接时出错”解决方案
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • NS2仿真过程中需要的语言及基本组件
  • 国庆节游开封
  • STL
  • ASP.NET MVC 概述
  • Lync 小技巧-34-通过Lync Server 2013的URI批量启用UM
  • Shell脚本批量创建用户并随机生成密码
  • 虚拟机下Linux系统上网-个人经验
  • IMO2012 Problem5 题解
  • mysql 5.6.20 数据库中文乱码解决方法
  • OGEngine:Java程序员也能开发iOS游戏
  • ASP.NET 全局变量和页面间传值方法
  • 爆:中国互联网的那些黑色产业链(转)
  • android 一些 utils
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android系统模拟器绘制实现概述
  • CentOS 7 防火墙操作
  • DataBase in Android
  • iOS 系统授权开发
  • LeetCode算法系列_0891_子序列宽度之和
  • SQLServer插入数据
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 电商搜索引擎的架构设计和性能优化
  • 关于springcloud Gateway中的限流
  • 利用DataURL技术在网页上显示图片
  • 如何编写一个可升级的智能合约
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 原生js练习题---第五课
  • 说说我为什么看好Spring Cloud Alibaba
  • ​比特币大跌的 2 个原因
  • #QT(智能家居界面-界面切换)
  • #Spring-boot高级
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (四)JPA - JQPL 实现增删改查
  • (四)鸿鹄云架构一服务注册中心
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)JAVA中的堆栈
  • (转)linux 命令大全
  • (转)nsfocus-绿盟科技笔试题目
  • .NET Core中的去虚
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET MVC之AOP
  • .net refrector
  • .NET Standard 的管理策略
  • .net 简单实现MD5
  • .NET是什么
  • .NET学习教程二——.net基础定义+VS常用设置
  • .pop ----remove 删除
  • [ NOI 2001 ] 食物链
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网