关于web端的单点登录实践

标签: web 单点登录 实践 | 发表时间:2012-08-27 13:00 | 作者:yupeng
出处:http://www.cnblogs.com/

问题:

 假设现在有4个域名,www.a.com,www.b.com,www.c.com,www.d.com,在a.com这个域内登录了,不种其他3个域名的cookie,如果用户输入其他的三个域的时候,也能保证用户在不输入用户名和密码的时候也能登录

说在前面的话:

1)在web端登录和未登录:使特定的cookie的值生效/失效,这个特定,就是你所制定的规则。

2)问题的关键:如何获得cookie的值,就获得了帐号的通行证,就可以登录了,然后就是做你想做的事情了。比如修改,删除资料,修改密码,做你想做的任何事情,总之,你控制了这个帐号了。

分析:

1)在www.a.com 这域名下登录,我们可以将cookie设置在a.com这顶级域名上,如果这个域的子域,比如1.a.com,2.a.com都能取到这个域的cookie的,都能登录,不存在不能登录

2)在a.com这个域名下登录了,如何在b.com,c.com,d.com这个域名下获得a.com的cookie的值,只要获得a.com这个域下的该用户的cookie的值就可以了。

如何取得cookie呢?我们做了以下思考:

1.跨域取cookie,这个是安全的吗?refer可以伪造吗,有那些方式?

2.跨域请求是否能获得header的内容?

3.跨域post提交(iframe+post)是否能获得iframe里面的内容?

现在我们看看上面3个问题:

1.跨域,我们这里思考,采用loadJsonp的形式,这个是安全的吗,loadjsonp对外都是静态的,我们可以看,别人也可以看,不同的是我电脑和浏览器的状态,基于这个考虑,我们限制了referrer,即来源,

这个可以挡住一部分,但是这个是可以伪造吗?查阅了相关资料,前端没有办法伪造,但是可以为空,在这个问题上,我们限制了referrer不为空,并且在我们的白名单里面就可以了。

2.是否能获得header的内容,我们知道loadJsonp是通过创建script标签来获取数据的,因此肯定不能获得header头信息的,ajax是可以的,只要设置 type: 'HEAD', 就可以获得头信息,但是ajax是不能跨域的,

因为我们排除了跨域获得header的可能性

3.由于安全沙箱的限制,iframe里面如果不是本域的内容,肯定不能获取得到。

基于以上考虑,我们就采取了loadjsonp+限制referrer的形式来跨域获得cookie,获取cookie后,我们就往本域的根目录写入,然后就可以在本域内实现登录。而不涉及到其他域的cookie问题。

方案实施:

方案1:提供通用js, 通过设置基准域名cookie(例如www.a.com), 其它业务均从基准域名获取cookie的方式,来获取登录状态。

登录时设置两个基准域和当前域下的cookie,其它业务需要时再拉取基准域名cookie来设置自身cookie。 

此方案存在的问题:

需要加载js,只能在页面加载完js到浏览器后才能执行,设置本域cookie, 需要再次刷新页面才能是登录状态。

业务方的页面有二种情况不能用这种方案:

1.登录后才能访问,一般会在后端判断用户是否未登录,然后直接跳转到登录页面,

2. 不登录也能访问,可是是否登录决定页面的部分显示数据(通用js自动登录后刷新本页面可以得到效果,但是用户体验差)。

此方案比较适合页面无需登录也能访问,并且登录后页面效果没有变化的页面,静态页面比较适合这种情况。

由于要检测当前域是否是登录状态,然后要请求基准域,并且设置本域cookie,对基准域本身的服务压力大,几乎是业务方的所有pv*n

方案2: 提供通用登录js, 每次需要用户输入用户名,密码之前,先去基准域名获取登录状态,如果是已经登录,就显示:已检测到已登录用户:XXX, 点击直接登录或者换其他账号登录,

此方案存在的问题:

不是通常意义的单点登录,只是缩短了用户登录的流程,减少代价

优点:

不用业务方每个页面都部署,对业务方完全透明;

对基准域的请求压力不大;

就算在目前轮询的事情下,也存在单域cookie失效导致用户未登录的情况,通过这种方式也能改善用户体验;

安全风险:

目前所有域下都是用的同一个cookie, 任何一个也没如果出现xss漏洞,都会导致用户cookie泄露,安全完全不可控, 单点登录会扩散这种风险。

欢迎大家拍砖。谢谢!!

本文链接

相关 [web 单点登录 实践] 推荐:

关于web端的单点登录实践

- - 博客园_首页
 假设现在有4个域名,www.a.com,www.b.com,www.c.com,www.d.com,在a.com这个域内登录了,不种其他3个域名的cookie,如果用户输入其他的三个域的时候,也能保证用户在不输入用户名和密码的时候也能登录. 1)在web端登录和未登录:使特定的cookie的值生效/失效,这个特定,就是你所制定的规则.

cas配置单点登录

- - 开源软件 - ITeye博客
        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:.        注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下.

android 单点登录功能

- - CSDN博客移动开发推荐文章
很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全 ,或者用户账号功能使用限制等问题. 这时候我们就会考虑到单点登录这个功能. 一般情况下我们在开发单点登录功能的时候,其实有很多种做法,这个根据自己的具体需求选择就可以,其实我一直认为很多东西没有绝对的规则,我们其实需要做的是尽量全面的尽可能多的去掌握更多的知识技术,当我们用到的时候可以从中选择出最适合自己的产品的技术,从开发时间,应用性等.

Web前端优化最佳实践

- Jimmy - 中文热文榜|最新
还有 Jason, Bixuan, 曦, 推荐,查看全部 8 个推荐. 博评 - Sting的网经发表于2010-08-08 08:41:10. Google的前端优化最佳实践 Yahoo的前端优化最佳实践. Web前端优化最佳实践之Content篇. 尽量减少 HTTP 请求 (Make Fewer HTTP Requests).

Java Web 服务性能优化实践

- - 博客 - 伯乐在线
来源: IBM developerworks. 简介: 本文介绍如何提升 Java Web 服务性能,主要介绍了三种方法:一是采用 Web 服务的异步调用,二是引入 Web 服务批处理模式,三是压缩 SOAP 消息. 重点介绍在编程过程中如何使用异步 Web 服务以及异步调用和同步调用的差异点. 本文还示范了如何在项目中使用以上三种方法,以及各种方法所适合的应用场景.

Web动效研究与实践

- - 博客园_知识库
  随着CSS3和HTML5的发展,越来越多狂拽炫酷叼炸天的动效在网页设计上遍地开花,根据最新的浏览器市场份额报告,IE6的份额已经降到了5.21%,这简直是一个喜大普奔的消息,做动效可以完全不care低端浏览器的时代已经在向我们招手了. 俗话说得好,颜值不够,动效来凑,Web动效已经不仅仅是网页设计的润滑剂了,它的功能更多的体现在了交互逻辑、视觉渲染和创新实践上,上能引人注目,下能潜移默化.

CAS解决单点登录SSO

- - CSDN博客推荐文章
关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得. 需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面——客户端篇. CAS原理与配置-基于CAS的单点登陆的研究(上). 单点登录(SSO)是企业开发的重要问题,在我的毕设项目中,由于要和系统其他开发模块共用用户认证模块,方便共享用户资源,所以需要一个好的SSO解决方案.

自己动手写SSO(单点登录)

- - ITeye博客
SSO在我们的应用中非常常见,例如我们在OA系统登录了,我们就可以直接进入采购系统,不需要再登录了,这样使我们非常方便. 现在网上也有很多实现方法,于是乎我也想写一个看看. 我主要用到的是cookie的机制. 在此,分享给大家, 同时提供源代码下载. SSO的实现一般是会有一个SSO Server,也会叫认证中心,同时也会有被认证的系统,如OA系统、采购系统等,他们就相当于SSO Server的client.

CAS 4.0 单点登录教程

- - ITeye博客
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一. SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 耶鲁大学(yale)开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Service)被设计成一个独立的Web应用程序(cas.war).

CAS实现SSO单点登录原理

- - 非技术 - ITeye博客
CAS实现SSO单点登录原理. CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目.