SSO-淘宝网and京东(前台分析)
2015-12-15 18:27
169 查看
原文:http://elf8848.iteye.com/blog/2067777
SSO 原理:http://blog.csdn.net/cutesource/article/details/5838693
单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用;同样,用户只需注销其中一个应用,就可以成功注销其他应用。
当一个公司产品线越来越复杂,做的东西越来越多,考虑到用户的便利性和业务的交集,单点登录也就变得越来越必然。譬如,阿里巴巴中的淘宝网,天猫,聚划算和一淘,考虑下面的场景:我们用户登录淘宝网购物,紧接着朋友打电话说出去玩,于是打开聚划算的时候你会发现,你已经登了聚划算!可能这些细节都被大多数人忽略了(被谁给惯坏了),但如果要让用户再次手动登录聚划算,用户体验可想而知。这种便利性就是单点登录所带来的。
在单点登录中,认证系统会为每一个应用分配一把钥匙,也就是说有了这把钥匙,账号密码的输入就可以免去了。这把钥匙就藏在浏览器的 cookie 中。应用获取钥匙有两种方法:
一,成功登录应用A 后,认证系统为应用A 分配一把钥匙;同时,应用A 凭借自己已经成功登录,帮其他应用代领钥匙。下一次访问应用B 的时候,应用B 就能成功免登录了。
二,这里认证系统的域名是应用A 的子域名,即如果应用A 是 example.com,认证系统可能是个 passport.example.com。当成功登录应用A 后,认证系统为应用A 分配一把钥匙;下一次访问应用B 的时候,web 页面被重定向到认证系统,因为认证系统的域名是应用A 的子域名,所以应用A 的钥匙,即 cookie 被带上,从而用户的访问得到了信任,认证系统为应用B 分配钥匙,页面被重定向到应用B。
接下来会对淘宝网和京东商城的网站进行单点登录实例分析。
来看看淘宝网做法。
登录了 taobao.com 后,下面是所产生的 cookie,也就是说认证系统已经为应用taobao.com 分配了钥匙,但这里并没有 etao.com 或者 tmall.com 的 cookie,认证系统还未为他们分配钥匙。
下一步我们尝试去访问 etao.com:
etao.com 被重定向到了 www.etao.com;访问 www.etao.com 被重定向到 http://jump.taobao.com/,下面是 response HTTP:
?
Code Sample
浏览器会继续访问 http://jump.taobao.com/jump?target=http%3A%2F%2Fwww.etao.com%2F%3Ftbpm%3D20140329,下面是 request HTTP,这里访问带上了应用taobao.com 的钥匙,即 cookie,网站后台会验证应用taobao.com 的钥匙:
?
Code Sample
认证成功,看来钥匙是有效的,又产生一个重定向,下面是和上面对应的 response HTTP:
?
Code Sample
接下来浏览器访问 http://pass.etao.com/add?…….,下面 response HTTP:
?
Code Sample
「Set-Cookie」意味着应用etao.com 拿到了认证系统的钥匙,耶斯!
来看看京东商城的做法
登录 jd.com 后发现,它已经给所有的应用代领了钥匙!这里利用了前端里面的 jsonp,对于跨域的问题,jsonp 驾轻就熟。
成功登录 jd.com,会跳转到 jd.com,里面有一小段 js 代码发起了 jsonp 请求:
?
Code Sample
ajax get 到数据自动调用预设值的回调函数。jsonp 返回的数据是:
?
Code Sample
回调函数对 a.sso 中每一个连接执行 getJSON()。注:使用 jquery 的 getJSON() 进行跨域读取数据,实际上 getJSON() 方式的根本原理和 ajax 使用 jsonp 的方式一样。
以第一个参数为例,所产生的 request HTTP:
?
Code Sample
结果产生一个重定向到 http://sso.360buy.com 的响应,与上面对应的 response HTTP:
?
Code Sample
再次产生新的请求,请求目标为 http://sso.360buy.com:
?
Code Sample
response HTTP 中有 「Set-Cookie」说明已经拿到认证系统的钥匙了:
?
Code Sample
其他应用类似,这里只举例 360buy.com.接着我试图访问 http://360buy.com:
?
Code Sample
可见访问 http://360buy.com 的时候,并没有特地跑去认证系统索要钥匙,只凭借之前访问 jd.com 时 getJSON() 留下的 cookie。
SSO 原理:http://blog.csdn.net/cutesource/article/details/5838693
单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用;同样,用户只需注销其中一个应用,就可以成功注销其他应用。
当一个公司产品线越来越复杂,做的东西越来越多,考虑到用户的便利性和业务的交集,单点登录也就变得越来越必然。譬如,阿里巴巴中的淘宝网,天猫,聚划算和一淘,考虑下面的场景:我们用户登录淘宝网购物,紧接着朋友打电话说出去玩,于是打开聚划算的时候你会发现,你已经登了聚划算!可能这些细节都被大多数人忽略了(被谁给惯坏了),但如果要让用户再次手动登录聚划算,用户体验可想而知。这种便利性就是单点登录所带来的。
在单点登录中,认证系统会为每一个应用分配一把钥匙,也就是说有了这把钥匙,账号密码的输入就可以免去了。这把钥匙就藏在浏览器的 cookie 中。应用获取钥匙有两种方法:
一,成功登录应用A 后,认证系统为应用A 分配一把钥匙;同时,应用A 凭借自己已经成功登录,帮其他应用代领钥匙。下一次访问应用B 的时候,应用B 就能成功免登录了。
二,这里认证系统的域名是应用A 的子域名,即如果应用A 是 example.com,认证系统可能是个 passport.example.com。当成功登录应用A 后,认证系统为应用A 分配一把钥匙;下一次访问应用B 的时候,web 页面被重定向到认证系统,因为认证系统的域名是应用A 的子域名,所以应用A 的钥匙,即 cookie 被带上,从而用户的访问得到了信任,认证系统为应用B 分配钥匙,页面被重定向到应用B。
接下来会对淘宝网和京东商城的网站进行单点登录实例分析。
淘宝网的单点登录策略
来看看淘宝网做法。登录了 taobao.com 后,下面是所产生的 cookie,也就是说认证系统已经为应用taobao.com 分配了钥匙,但这里并没有 etao.com 或者 tmall.com 的 cookie,认证系统还未为他们分配钥匙。
下一步我们尝试去访问 etao.com:
etao.com 被重定向到了 www.etao.com;访问 www.etao.com 被重定向到 http://jump.taobao.com/,下面是 response HTTP:
?
Code Sample
?
Code Sample
?
Code Sample
?
Code Sample
京东商城单点登录策略
来看看京东商城的做法登录 jd.com 后发现,它已经给所有的应用代领了钥匙!这里利用了前端里面的 jsonp,对于跨域的问题,jsonp 驾轻就熟。
成功登录 jd.com,会跳转到 jd.com,里面有一小段 js 代码发起了 jsonp 请求:
?
Code Sample
?
Code Sample
以第一个参数为例,所产生的 request HTTP:
?
Code Sample
?
Code Sample
?
Code Sample
?
Code Sample
?
Code Sample
相关文章推荐
- 3、RabbitMQ之消息发布订阅与信息持久化技术
- 盖洛普民意测验中最热门的十大问题
- Linux Top 命令解析 比较详细(转)
- 如何恢复被覆盖的文件
- 控制反转(IoC)与依赖注入(DI)
- appium的api
- js 对象创建小知识
- 2、RabbitMQ简单实例
- 第三个Sprint ------第九天
- java yum安装的环境变量设置
- 二叉树查找(C#)
- RecyclerView是Android L家第一个美女,我要认识她。
- iOS后台长时间执行
- POJ-1088 滑雪 (记忆化搜索,dp)
- 网页即时通信
- Androidpull解析xml文件
- HDOJ--2011
- POJ-1088 滑雪 (记忆化搜索,dp)
- ProductHunt,TechCrunch和AppStore的差的值
- 我对uml类图关系的理解