`
lvjun106
  • 浏览: 436202 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

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

 
阅读更多

[转]:http://blog.csdn.net/clh604/article/details/20365967

最近在研究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 plaincopy在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 plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <?php  
  2. header("Location:http://video.luojisiwei-inc.com/");//跨域重定向  


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

 

 

[html] view plaincopy在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 plaincopy在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、至此京东就完成了单点登录的全过程

分享到:
评论

相关推荐

    SSO完整版跨域单点登录

    SSO(Single Sign-On)是单点登录的缩写,是一种网络用户身份验证的机制,允许用户在一次登录后,可以访问多个相互信任的应用系统,而无需再次进行身份验证。这个压缩包文件提供了SSO的完整实现,适用于跨域场景,...

    SSO 单点登录(java)

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后,能够访问多个相互关联的应用系统,而无需再次输入凭证。在Java环境下实现SSO,通常涉及以下几个核心知识点: 1. **原理**:SSO的核心思想...

    SSO单点登录【基于cookie二级域名下跨域共享】

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在基于Cookie的二级域名下跨域共享SSO实现中,核心概念是利用Cookie的特性来实现用户...

    完全跨域的单点登录 完全跨域的单点登录

    单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证的机制,它允许用户在一次登录后,能够在多个相互关联的应用系统中自由切换,而无需再次输入认证信息。在Java开发环境中,实现完全跨域的单点登录是一项...

    sso单点登录技术

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他相互信任的系统或应用。这大大提升了用户体验,减少了用户记忆多个用户名和密码的负担,...

    sso单点登录(整理的学习文档)

    ### SSO单点登录概述与关键技术 #### 一、单点登录(Single Sign-On, SSO)的概念 单点登录是一种使用户仅需一次身份验证即可访问多个应用程序的技术。这通常应用于互相信任的系统之间,允许用户在一个系统中登录后...

    asp.net SSO单点登录例子

    ASP.NET SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在这个例子中,我们有三个不同的域:主域a.com以及两个子域app1.a.com和app2.a....

    SSO单点登陆实现 cookie + jsonP 实现夸域单点登陆

    SSO(Single Sign-On)单点登录是一种...总结,通过cookie和JSONP的结合,我们可以构建一个基本的SSO系统,实现跨域的单点登录功能。然而,实际应用中还需考虑更多的安全措施和扩展性需求,以适应不断变化的网络环境。

    SSO C#单点登录源码

    综上所述,SSO C#单点登录源码涉及到的身份验证、Cookie管理、跨域策略以及安全措施等多个方面,是构建高效、安全的企业级应用的重要组成部分。通过理解和掌握这些知识点,开发者能够实现更便捷、统一的用户身份验证...

    ASP.NET跨域单点登录的实现(SSO)

    ASP.NET跨域单点登录(Single Sign-On, SSO)是一种高效的身份验证机制,它允许用户在登录一个应用系统后,无需再次输入凭证即可访问其他关联的应用系统。这种技术极大地提升了用户体验,尤其在多应用环境中的企业级...

    跨域点单登录源码SSO_cross_domain

    跨域点单登录源码SSO_cross_domain是一个用于实现单点登录(Single Sign-On, SSO)的项目,主要解决了用户在多个域名之间切换时无需重复登录的问题。在这个项目中,我们将探讨三个核心概念:跨域、点单登录以及SSO。...

    单点登录的demo(使用cookie+filter实现)

    在这个“单点登录的demo(使用cookie+filter实现)”中,我们将深入探讨如何利用Cookie和Filter技术来实现一个简单的SSO系统。 **一、Cookie基础** Cookie是Web服务器存储在用户浏览器上的一小段数据,用于在用户与...

    jwt手写SSO单点登录框架zip

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。JWT(JSON Web Token)则是一种轻量级的身份验证和授权机制,它通过自包含的方式,将...

    ncc单点登录重定向单据代码

    在IT行业中,"ncc单点登录重定向单据代码"涉及到的是网络计算环境(Network Computing Cluster,简称NCC)中的安全身份验证和用户访问控制技术。单点登录(Single Sign-On,SSO)是一种方便用户管理和提升安全性的...

    sso-use-cookie单点登录

    总结,"sso-use-cookie"项目通过SpringBoot和Cookie实现了单点登录功能,适合有一定Spring基础的学习者了解SSO的基本原理和实践。通过深入学习和理解这个项目,开发者能够掌握如何在实际项目中应用SSO,提升系统的...

    SSO单点登入,使用cookie实习(Struts2)

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在本文中,我们将深入探讨如何使用Struts2框架结合Cookie技术实现SSO。Struts2是Java...

    sso_bbs(v2)(使用cookie+filter实现单点登录的第二个版本)

    综上所述,sso_bbs(v2)项目是通过Cookie和Filter技术实现单点登录的一个实例,它涉及到用户认证、请求过滤、安全策略等多个方面,是理解SSO机制和Web应用程序安全设计的重要案例。通过分析和实践这个项目,开发者...

Global site tag (gtag.js) - Google Analytics