问题:
假设现在有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泄露,安全完全不可控, 单点登录会扩散这种风险。
参考文章:http://developer.51cto.com/art/201104/255729.htm
http://www.cnblogs.com/yupeng/archive/2012/08/27/2651397.html
相关推荐
在IT行业中,Web单点登录(Single Sign-On,简称SSO)是一种常见的身份验证机制,它允许用户通过一次登录即可访问多个相互关联的应用系统,提高了用户体验并降低了管理复杂性。本教程将指导你如何使用J2EE技术,特别...
总之,基于Node.js和Express的SSO单点登录实践是一个涉及Web开发、身份验证、数据库操作等多个领域的综合性项目。通过合理的设计和实现,我们可以构建出高效、安全的SSO系统,提升用户体验,同时降低运维复杂度。在...
在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现客户端与服务器端的交互。 1. CAS工作原理: CAS的核心思想是集中式的身份验证,用户只需在一个地方进行登录,之后访问其他已经...
在IT行业中,单点登录(Single Sign-On,简称SSO)是一种重要的身份验证机制,它允许用户在一个系统中登录后,无需再次认证即可访问多个相互信任的系统。Spring Boot是Java开发者的常用框架,用于快速构建高效、简洁...
单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次认证即可访问多个相互信任的系统。它简化了用户在多个应用之间切换时的身份验证流程,提高了用户体验并降低了...
在"单点登录与权限管理(web api)"的文档中,可能会包含以下内容: 1. 如何配置CAS服务器,包括设置认证URL、票证验证参数等。 2. 使用OWIN中间件集成CAS的代码示例,以及如何处理TGT和Service Ticket。 3. .NET中...
单点登录(Single Sign-On,简称SSO)是一种网络应用中的身份验证机制,它允许用户在一次登录后,就可以在多个相互独立的应用系统之间自由切换,而无需再次进行身份验证。这种技术极大地提升了用户体验,同时也简化...
[置顶] SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) http://blog.csdn.net/ae6623/article/details/8851801 [置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas...
在这个"CAS单点登录安装笔记4 -- asp.net client端的设置"中,我们将深入探讨如何将ASP.NET应用程序配置为使用CAS服务器进行身份验证。 首先,要使ASP.NET客户端与CAS服务器协同工作,我们需要在客户端应用程序中...
ASP.NET 单点登录(Single Sign-On,SSO)是一...总之,ASP.NET单点登录源代码涉及到身份验证、授权、数据库交互以及安全策略等多个方面,通过深入理解并实践这些代码,开发者可以掌握构建高效、安全的SSO系统的方法。
在这个场景下,我们讨论的是“前后端未分离”的单点登录实现,这通常意味着前端和后端代码在同一项目中,没有采用现代的前后端分离架构。 1. **单点登录原理**: SSO的核心思想是通过一个中心认证服务(Central ...
CAS(Central Authentication Service)是一个开源的单点登录解决方案,由Yale大学发起,旨在为Web应用提供一种可靠的单点登录方法。它已成为JA-SIG(Java Architecture for XML Web Services)的一个项目,于2004年...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在这个"SSO demo 单点登录"示例中,我们看到使用了SSH(Spring、Struts2、...
总结来说,单点登录和权限管理是构建安全、高效的企业级Web API的关键。C#提供了一系列工具和框架,如WIF、ASP.NET Identity和JWT,使得开发者能够轻松地在Web API项目中实现SSO和精细的权限控制。理解这些概念和...
在这个“cas单点登录自己写的测试例子”中,开发者提供了一个包含客户端和服务器端的完整示例,旨在帮助理解并实践CAS SSO机制。这个项目使用Maven作为构建工具,方便管理和依赖的解决。 首先,我们来看一下CAS的...
总结起来,这个"单点登录cas服务器demo及springboot客户端demo"项目提供了一个实践单点登录概念的实例,涵盖了CAS服务器的搭建、Spring Boot应用的CAS客户端集成,以及Shiro或Pac4j的使用。对于想要学习和理解SSO...
.NET Core 2.0 和 MVC 框架的结合为开发者提供了一个强大的平台来构建现代Web应用程序,包括实现单点登录(SSO)系统。在SSO系统中,用户只需登录一次,就可以访问多个相互关联的应用程序,无需多次输入认证信息。本...
单点登录(Single Sign-On, SSO)是一种网络身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而...这个“JWT实现单点登录解决方案demo”提供了一个实践性的起点,帮助开发者快速理解和应用SSO技术。
【驾培管理系统Web端代码】是一个面向驾驶培训行业的管理系统的源码,主要涵盖了Web前端的开发内容。在驾培行业中,此类系统通常用于协助驾校管理者高效地管理学员信息、课程安排、教练资源以及考试预约等业务流程。...
SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。这个概念在现代企业IT环境中尤其重要,因为它提高了用户体验,同时降低了管理多套...