在一个比较复杂的网站环境下。有多个产品向外提供服务。每个产品下都有自己的用户登录界面。现在需要设计一个统一的登录界面。当用户在这个界面登录后就可以自由的使用各个产品和服务。同时意味着用户用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去。
实际应用:Sohu的Passport将focus.cn,17173.com,sogou.com,chinaren.com这四个域名下的产品全部整合在一起了。用户在这四个站点中任何一个地方都可以登录。当用户登录后可以自由的使用其他域名下的服务。现在很多网站上都有bbs blog album服务。这些服务一般也是自己维护自己的用户信息。当发展到一定时候,也需要一个Passport机制整合所有服务,使用户可以单点登录。
Sohu的实现方案
在http://passport.sohu.com/ 登录后 fiddler可以拦截到如下的返回信息:
由于passport.sohu.com的登录界面使用了iframe隐藏提交。所以页面没有看到刷新。隐藏的iframe把用户名和加密的password和其他信息发送给了passport.sohu.com。passport.sohu.com在Response中设置了成功登录的cookie。这个cookie可以证实这个用户成功登录了passport.sohu.com。
当用户在Passport成功登录后。客户端的Javascript根据成功登录的标志,操作iframe请求http://passport.sohu.com/sso/crossdomain_all.jsp?action=login 因为在同一个域名下,没有跨域,在这次请求中,上次成功登陆的cookie会被一并带着回去。服务器端检查到成功登录的cookie后会Render回一段同时登录多个站点的html。
这段html 要向4个地址发送请求。截至到现在都是在相同的Domain(passport.sohu.com)请求和返回,为真正的跨站点登录做准备,真正的跨站点登录还没有开始。下面passport.sohu.com通过sso/crossdomain.jsp 在服务器端进行Redirect 设置http head 为302进行跳转。跳转后在这个跳转后的域名下设置登录成功的cookie。这就是sohu实现跨站点登录的核心过程。下面是passport.sohu.com登录17173.com的过程。
1. 通过http://passport.sohu.com/sso/crossdomain_all.jsp?action=login Render回来的script <script type="text/javascript" src="http://passport.sohu.com/sso/crossdomain.jsp?action=login&domain=17173.com"></script> 请求同域下的http://passport.sohu.com/sso/crossdomain.jsp?action=login&domain=17173.com 这时passport.sohu.com下成功登录的cookie会被带回去。
2. 服务器看到成功登录的Cookie后。在服务器端计算出一个加密后的17173.com的登录Url,并Redirect到这个Url。
3. 17173.com从url的QueryString中取得信息。并在Response中设置Cookie。这个Cookie终于写到了17173.com下。而不是passport.sohu.com下。从而使得用户在17173.com下登录。其实用户在17173.com下手动登录也是写上同样的Cookie。以后用户再访问17173.com的页面时这个Cookie会被带回去。这就表示用户在17173.com下成功登录过了。
经过上面的步骤。用户在passport.sohu.com下登录的同时也在其他站点登录了。
在上面的过程中,最核心的技巧就是在指定的域下写入想要的Cookie:
1. Sohu使用了在同一个域名登录后通过再次请求这个域名下某个链接后,得到要登录站点的请求Url,通过javascript使隐藏的iframe请求要登录站点的Url,服务器端接到请求Redirect到要登录站点,然后通过Response写入Cookie,完成跨域名写Cookie的操作。这种写Cookie的方式,需要在跳转时对请求的QueryString进行加密。接受方需要对QueryString进行解密。
2. 这种做法在服务器端不需要特别的处理。只要写好相应Post操作 WriteCookie操作 Redirect操作 就可以了。在FireFox下就可以正常工作了。但是在IE下写Cookie的操作还不行,总是写不进去Cookie。需要在Response中加入一段特别的Header. P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
这个Http Header 是P3P安全的要求。P3P的详解 http://www.oreilly.com.cn/book.php?bn=7-302-07170-5
微软对这个的解释:http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752
分享到:
相关推荐
标题中的"搜狐单点登录设计原理"涉及到的是SSO的核心概念和技术,通常包括以下方面: 1. **认证中心(Identity Provider,IDP)**:SSO系统的核心部分,负责验证用户的凭证,如用户名和密码。一旦用户通过IDP认证,...
- Solution1可能是指解压后的文件包含了完整的示例代码或解决方案,帮助开发者快速理解和接入搜狐API。这可能涵盖授权流程的实现、接口调用示例以及错误处理机制等。 总的来说,利用搜狐API授权登录和应用接口,...
- 设计模式是面向对象软件设计中一系列被广泛接受的、经过验证的解决方案。23种经典设计模式包括但不限于: - 单例模式:确保一个类只有一个实例,并提供一个全局访问点。 - 工厂方法模式:定义创建产品对象而不...
6. **负载均衡**:负载均衡是解决高并发和大规模请求的核心技术,它通过将请求分发到多台服务器,避免单点故障,提高可用性和响应时间。常见的负载均衡算法包括轮询、权重轮询、最少连接数等。可以采用硬件负载均衡...
堡垒机的主要功能是为网络系统提供一个单一的接入点,实现对运维人员的远程运维行为进行管理和审计,保证系统的安全合规性。 搭建JumpServer堡垒机环境大致可以分为几个步骤:准备系统环境、安装必要的软件组件、...
该系统旨在通过实现统一认证与单点登录(Single Sign-On, SSO),提高用户体验,简化管理和维护工作,并保障信息安全。 #### 统一认证与单点登录 统一认证与单点登录是一种让用户只需进行一次登录就能访问所有授权...
该项目的目标是利用纯JavaScript技术(不依赖Flash)来复现搜狐女性频道网站中的图片切换动画效果。这种类型的项目通常涉及网页动态内容的更新、图片加载管理以及交互式用户界面设计等方面。 #### 二、关键技术点...
以下是对方案中涉及的各个知识点的详细说明: 1. **市场推广目标**: - 目的是通过有效推广建立网络品牌,提高网站点击率,以更快速度实现信息传播。 - 在两个月内,每天独立访问用户的目标设定为500人。 2. **...
9. OceanBase采用Paxos算法来解决分布式系统中的数据一致性问题,并且不同于传统的主备库或双选方案。Paxos算法可以在容灾场景下彻底规避脑裂问题,即保证不会出现多个主数据库的情况。 10. TCP-C(Transaction ...
这种单点登录(Single Sign-On, SSO)机制极大地提高了用户的便利性,同时也简化了网站后台的用户管理。用户只需记住一套用户名和密码,就能在全站范围内自由切换,而无需反复登录。对于大型门户站点来说,这种设计...
JSR168定义了Portal是一个基于Web的应用程序,它提供了个性化、单点登录、来自不同来源的内容聚合,并承载信息系统展示层。Portal的主要功能是聚合不同源的内容,并可能具备高级的个性化功能,以向用户提供定制化的...
JSR168中定义的Portal是一个基于Web的应用,具备个性化、单点登录、内容聚合以及信息系统的展现层托管等功能。简单来说,Portal是一个整合了不同来源内容并提供定制化信息给用户的入口。 2. Portlet解析 Portlet是...
而搜狐博客开发组的数据表明,在单Web服务器单数据库的条件下,每天最多可以承载300万次页面浏览量。 这些数据提示我们,系统负载的不同会导致其承载能力存在差异。例如,搜狐博客目前的流量已超过3000万次/天,其...
根据提供的文件信息,这里将基于“Vue2.0视频教程”的标题和描述来生成相关的IT知识点。虽然部分内容提供了一个百度网盘的链接,但由于实际内容无法访问,我们将围绕Vue.js 2.0的基础概念、核心功能以及实际应用等...
它通过将流量分配到多个服务器,确保无单点故障,保证服务的连续性和可用性。负载均衡可以硬件实现,也可通过软件如Nginx、HAProxy等工具进行。 此外,还有CDN(Content Delivery Network)内容分发网络,它通过...
### Redis 概览知识点 #### 一、Redis 在搜狐的应用 - **缓存**:Redis 作为缓存层,能够存储频繁访问的数据如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)以及有序集合(Sorted Sets),极大地提高了...
它将流量分散到多台服务器,防止单点故障。负载均衡器可以是硬件设备,也可以是软件实现,如Nginx、HAProxy等。负载均衡策略有轮询、最少连接数、IP哈希等,可以根据实际需求选择合适的策略。 综上所述,大型网站的...
- 负载均衡是处理大规模并发请求的终极解决方案,通过分配请求到多个服务器,确保无单一故障点,同时提高可用性和响应速度。负载均衡技术包括硬件负载均衡器、软件负载均衡解决方案(如Nginx、HAProxy),以及...
3. **数据库集群和库表散列**:随着网站规模的扩大,单台数据库难以承受高并发访问。数据库集群是常见解决方案,如MySQL的主从复制。库表散列是根据业务逻辑将数据分散到多个数据库或表中,如用户表按用户ID散列,...
- DM(直接邮件)宣传单深入宿舍、教室等地点进行点对点派发。 - 在活动现场集中派发DM。 - 为了确保宣传覆盖面,派发DM是不可或缺的方式。 - 海报张贴策略强调全面性、频率与美观度,以确保其能够在人流密集的...