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
- <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、至此京东就完成了单点登录的全过程
SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析相关推荐
- SSO单点登录学习总结(2)——基于Cookie+fliter单点登录实例
1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置Cookie的域setDomain(&quo ...
- python绕过验证码登录_python接口自动化(十三)--cookie绕过验证码登录(详解)...
简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加cookie的方式绕过验证码.(注意:并不是所有的 ...
- 不在一个局域网下,如何设置可以被远程登录的服务器[ubuntu]?【ssh登录】【不使用软件】
不知道在看见这篇博文之前,你是否已经兜兜转转了好久,并且已经实现了局域网下的远程登录,但是两个电脑不在一个网络下,怎么都连不上. 那是因为,你没有进行内网穿透.简单说明一下内网穿透,就是,把的电脑的I ...
- 【No.1】基于Cookie的单点登录(SSO)
2019独角兽企业重金招聘Python工程师标准>>> 这篇主要说明基于Cookie的单点登录实现,以及Cookie的一些特性以及使用说明. 1.Cookie是什么,如何工作的 在程 ...
- php跨域单点登录,SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析...
SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1. 跨域redirect实例: te ...
- Cookie同域,跨域单点登录
Cookie 同域单点登录最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录.单点登录: ...
- 跨域 Cookie 实现单点登录
单点登录 单点登录(SSO - Single Sign On):对于同一个客户端(例如 Chrome 浏览器),只要登录了一个子站(例如 a.com),则所有子站(b.com.c.com)都认为已经登 ...
- 【笔记】跨域重定向中使用Ajax(XHR请求)导致跨域失败
背景: 1.前端Web中有两个域名,a.com和b.com,其中a.com是访问主站(页面),b.com是数据提交接口的服务器(XHR请求) 2.a.com中用XHR调用b.com/cerate[没有 ...
- java redirect 跨域_如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式...
如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式 需求,项目A在服务器A上,需要重定向到服务器B上项目B,并且需要携带参数,参数对用户不可见,所以不可以将参数拼接在重定向ur ...
最新文章
- JS(内置对象,全局函数,事件,事件对象)
- Echange配置企业邮件收发策略
- UpdateProgress
- hdu 1163 ( 求n^n位根)
- 电液伺服系统_电液伺服系统的误差/偏差以及开环增益
- html文本可选择,如何用javascript选择html文本?
- vue el-checkbox循环多个如何选中当前的_一次关于Vue的自我模拟面试
- 记录一次Socket异常:java.net.SocketException: Connection reset
- react-navigation设置navigationOptions中Static中使用 this 的方法
- FPGA(5)--VHDL--10十进制计数器及7段显示译码器
- python代码_python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!
- 简单FTP服务器(ccd) v1.0
- python编程(gevent入门)
- vba 字体颜色_VBA第一章自检,23关,你能破吗?
- oracle 常用语句2
- mfc多文档获取版本号_管理Microsoft Office文档—基于SOLIDWORKS PDM
- iOS 全局变量(转)
- linker command failed with exit code 1 (错误总结)
- c++开源库rapidxml介绍与示例
- php 0x80004005,错误类型:Provider (0x80004005)未指定的错误 的一个处理方法