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

Posted PHP老杨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSO单点登录跨域重定向跨域设置Cookie京东单点登录实例分析相关的知识,希望对你有一定的参考价值。

SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程

涉及的关键知识点:

1、

跨域redirect实例:

test.html

    <script ></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

<?php


    echo "aaaaaaaaaa";  
    setcookie("vtest","ooooooooooo");//跨域设置cookie  
    die;


访问test.html,在firebug下看到请求的结果

 

客户端先给test.发ajax请求,然后被重定向到http://video.luojisiwei-inc.com下,并且返回一个Set-Cookie的Response,这样就实现了跨域重定向和跨域设置Cookie

然后浏览器中访问http://video.luojisiwei-inc.com,发现该域名下确实有了个叫vtest的Cookie

SSO单点登录、跨域重定向、跨域设置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数据

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

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> 

请求的结果是这样的:

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

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

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

 

 

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

 

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


以上是关于SSO单点登录跨域重定向跨域设置Cookie京东单点登录实例分析的主要内容,如果未能解决你的问题,请参考以下文章

单点登录认证原理及跨域cookie共享

sso单点登录之跨域cookie共享 (跨域缓存共享)

可跨域的单点登录(SSO)实现方案

单点登录-SSO

可跨域的单点登录(SSO)实现方案(附.NET代码)

sso单点登录都有哪些实现方式?