`

网站跨站点单点登录

    博客分类:
  • java
阅读更多

昨天和几位朋友探讨到了这个话题,发现虽然单点登录,或者叫做独立的passport登录虽然已经有了很多实现方法,但是能真正了解并实现的人却并不太多,所以些下此文,希望从原理到实现,能让大家了解的多一些 至于什么是单点登录,举个例子,如果你登录了msn messenger,访问hotmail邮件就不用在此登录。 一般单点登录都需要有一个独立的登录站点,一般具有独立的域名,专门的进行注册,登录,注销等操作

我们为了讨论方便,把这个登录站点叫做站点P,设其Url为http://passport.yizhu2000.com,需要提供服务的站点设为A和B,跨站点单点登录是指你在A网站进行登录后,使用B网站的服务就不需要再登录

从技术角度讲单点登录分为:

  • 跨子域单点登录
  • 完全跨单点域登录

跨子域单点登录

所谓跨子域登录,A,B站点和P站点位于同一个域下面,比如A站点为http://blog.yizhu2000.com B站点为 http://forum.yizhu2000.com,他们和登录站点P的关系可以看到,都是属于同一个父域,yizhu2000.com,不同的是子域不同,一个为blog,一个为forum,一个是passport

我们先看看最常用的非跨站点普通登录的情况,一般登录验证通过后,一般会将你的用户名和一些用户信息,通过某一密钥进行加密,写在本地,也就是一个加密的cookie,我们把这个cookie叫做--票(ticket)。

需要判断用户是否登录的页面,需要读取这个ticket,并从其中解密出用户信息,如果ticket不存在,或者无法解密,意味着用户没有登录,或者登录信息不正确,这时就要跳转到登录页面进行登录,在这里加密的作用有两个,一是防止用户信息被不怀好意者看到,二是保证ticket不会被伪造,后者其实更为重要,加密后,各个应用需要采用与加密同样的密钥进行解密,如果不知道密钥,就不能伪造出ticket,

(注:加密和解密的密钥有可能不同,取决于采用什么加密算法,如果是对称加密,则为同一密钥,如果是非对称,就不同了,一般用私钥加密,公钥解密,但是无论怎样,密钥都只有内部知道,这样伪造者既无法伪造也无法解密ticket)

跨子域的单点登录,和上述普通登录的过程没有什么不同,唯一不同的是写cookie时,由于登录站点P和应用A处于不同的子域,P站写入的cookie的域为passport.yizhu2000.net,而A站点为forum.yizhu2000.net,A在判断用户登录时无法读到P站点的ticket

解决方法非常简单,当Login完成后P站点写ticket的时候,只需把cookie的域设为他们共同的父域,yizhu2000.net就可以了:cookie.domain="yizhu2000.net",A站点自然就可以读到这个ticket了

ASP。Net的form验证本身实现了这个机制,大家可以参考http://blog.csdn.net/octverve/archive/2007/09/22/1796338.aspx

ASP.NET身份验证信息跨域共享状态

在ASP.NET 2.0 中只需修改web.config文件即可,修改方法如下:

<authentication mode="Forms"> <forms name=".ASPNETFORM" domain="imneio.com" loginUrl="/login.aspx" defaultUrl="/default.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false" cookieless="UseDeviceProfile" /> </authentication>

domain指定了cookie保存的域,只要保存的是 abc.com形式或者.abc.com的形式,那么其二级域名都可以共享此cookie。

此外,web.config标签中的<sessionState >也做相应修改,mode改为StateServer或者SqlServer,那么里面的session信息也就全部可以共享了。

StateServer需要在服务中开启“asp.net状态服务”的服务

http://www.imneio.com/2007/11/17/aspnetnote1/,以上斜体内容摘自此链接

完全跨单点域登录

完全跨域登录,是指A,B站点和P站点没有共同的父域,比如A站点为forum.yizhu1999.net,B站点为blog.yizhu1998.net,大家可以参考微软旗下的几个站点http://www.live.comwww.hotmail.com,这两个站点就没有共同的父域,而仍然可以共用登录,怎样才能实现呢?请参考下图,由于这种情况ticket比较复杂,我们暂时把P站点创建的的ticket叫做P-ticket,而A站点创建的ticket叫A-ticket,B的为B-ticket

login

由于站点A(forum.yizhu1999.com)不能读取到由站点P(passport.yizhu2000.com)创建的加密ticket,所以当用户访问A站点上需要登录才能访问的资源时,A站点会首先查看是否有A-ticket,如果没有,证明用户没有在A站点登录过,不过并不保证用户没有在B站点登录,(重复一下,既然是单点登录,当然无论你在A,B任意一个站点登录过,另外一个站点都要可以访问),请求会被重定向到p站点的验证页面,验证页面读取P-ticket,如果没有,或者解密不成功,就需要重定向登录页面,登录页面完成登录后,写一个加密cookie,也就是P-ticket,并且重定向到A站点的登录处理页,并把加密的用户信息作为参数传递给这个页面,这个页面接收登录页的用户信息,解密后也要写一个cookie,也就是A-ticket,今后用户再次访问A站点上需要登录权限才能访问的资源时,只需要检查这个A-cookie是否存在就可以了

当用户访问B站点时,会重复上面的过程,监测到没有B-ticket,就会重定向到P站点的验证页面,去检查P-ticket,如果没有,就登录,有则返回B的登录处理页面写B-ticket

注销的时候需要删除P-ticket和A-ticket

logout

怎么删除cookie:本来以为这个不是问题,不过还是有朋友问道,简单的说其实是创建一个和你要删除的cookie同名的cookie,并把cookie的expire设为当前时间之前的某个时间,不过在跨子域的删除cookie时有一点要注意:必须要把cookie的域设置为父域,在本文中为yizhu2000.com

为了保证各个环节的传输的安全性,最好使用https连接

分享到:
评论

相关推荐

    跨平台跨服务器跨网站SSO(单点登录)方案的DEMO

    SSO,全称为Single Sign-On,即单点登录,是一种网络用户身份验证的机制,允许用户在一次登录后,即可访问多个相互关联的应用系统,无需重复登录。在IT行业中,SSO是提升用户体验和提高安全性的重要手段,尤其在企业...

    跨站点共享Session解决方案,单点登录解决方案-ASP.NET 2.0版本

    在ASP.NET 2.0开发中,当需要在多个网站之间共享用户状态或者实现单点登录(Single Sign-On, SSO)时,面临的主要挑战是如何跨站点传递和管理Session信息。传统的解决方案包括使用数据库存储Session数据或利用...

    sohu单点登录的解决方案

    因此,许多网站开始采用单点登录(Single Sign-On, SSO)机制来提高用户体验和安全性。 **单点登录**是一种身份验证机制,允许用户使用一套认证信息(例如用户名和密码)访问多个相关的软件系统或服务,而无需重新...

    sso单点登录.rar

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。这个压缩包文件"SSO单点登录.rar"包含了关于SSO实现的两个关键部分:服务器端...

    OAuthCAS 单点登录框架

    ### OAuthCAS 单点登录框架知识点 #### 一、概述 OAuthCAS单点登录框架结合了CAS(Central Authentication Service)与OAuth两种认证协议的优势,旨在为用户提供统一且安全的身份认证服务。CAS是一种广泛应用于单...

    基于浏览器的单点登录协议中的身份验证缺陷:影响和补救

    基于浏览器的单点登录(SSO)协议减轻了用户处理多个凭证的负担,从而改善了用户体验和安全性。 在本文中,我们展示了指定和实现基于原型的基于浏览器的SSO用例需要非常小心。 我们发现主要的新兴SSO协议,即SAML ...

    SharePoint2010配置SSO单点登录

    在IT领域,特别是企业级应用中,单点登录(Single Sign-On,简称SSO)已成为不可或缺的技术之一。SSO能够简化用户的身份验证流程,提高工作效率,同时降低管理成本。本文将深入探讨SharePoint2010配置SSO单点登录的...

    .NET单点登陆的实现方法及思路

    即在System中实现单点登录SSO(Single Sign-On)。 我们知道,用户的即时状态通常是使用Application、Session、Cookie和存储的。而这些都是不能在程序中跨站点访问的。我们必需通过站点间相互通

    phpBB Multiple Domain SSO:phpbb 多域单点登录与 wordpress 插件-开源

    这些代码修改的作用是为 phpbb 和其他站点/代码/应用程序创建跨不同、多个域的单点登录。 这些修改使用 phpbb 用户表、会话等。 它的作用是通过使用 iframes 为每个域设置 cookie,它加载一些 connect.php 文件,该...

    ASP.NET源码——[企业]AyWeb企业网站管理系统单站点版_.zip

    在"ASP.NET源码——[企业]AyWeb企业网站管理系统单站点版_.zip"中,我们看到的是一个专门为企事业单位设计的企业网站管理系统。AyWeb 是这样一个系统的名称,它可能包含了构建企业级网站所需的多种功能模块,如新闻...

    SSO解决方案大全 Single Sign-On for everyone

    这种技术对于拥有多个应用程序或网站的企业尤其有用,可以提高用户体验,减少用户记忆多套登录凭证的困扰。以下将详细讨论如何在不同场景下实现SSO。 1. 虚拟目录的主应用和子应用间实现SSO: 当有两个.NET Web...

    asp.net 跨子域共享SESSION

    在实际应用中,通常会结合单点登录(Single Sign-On, SSO)系统来实现跨子域共享Session。SSO允许用户在一个子域登录后,其他子域无需再次登录即可访问。实现SSO时,Session共享是关键组成部分,通常会结合Cookie或...

    modsso:适用于Apache和NGiNX的单点登录模块-开源

    modsso是一个开源的Web服务器模块,专为Apache和NGiNX设计,旨在实现跨多个子域的单点登录(Single Sign-On,SSO)。SSO是一种身份验证机制,允许用户通过一次登录过程访问多个相互关联的应用系统,无需为每个系统...

    五指cms网站管理系统 v4.1.0 正式版

    2、单点登录功能,用户统一管理,统一验证;3、支持文章、图片、下载、以及自定义各种内容模型;4、支持内容的多级审核; 5、模块化构架,方便新功能、新模块的扩展;6、支持全静态生成整个站点,提高页面访问速度,...

    JavaEE版网站管理系统

    五、轻松建立并管理多站点,所有站点权限和内容独立管理,站点间实现单点登录; 五、面向未来的过渡,JEECMS v2.3.2 Final版是JEECMS面世以来发布的第一个正式版本,具有更大的灵活性和稳定性; JEECMS v2.4新版...

    网站群内容管理系统招标需求.doc

    - 全站用户管理:通过数据中心平台数据添加管理员,超级管理员负责所有用户信息及权限维护,实现单点登录。 2. 栏目管理: - 平台管理员可维护所有栏目和信息,分配不同管理用户和审核流程。 - 无限构建栏目结构...

    CMS网站管理系统,phpcms

    Ucenter是PHPCMS中的用户中心,它允许用户在多个应用间共享账号和信息,实现单点登录。这对于拥有多个子站点或者社区功能的大型网站来说尤其重要,能够提升用户体验,增强用户粘性。例如,bbs模块可能是论坛部分,...

    JEECMS 2.3.1 Beta 系统程序

    二、轻松建立并管理多站点,全站实现单点登录 在v2.3.1中特别加入了多站点功能,只需安装一套系统即可建立并管理多个站点,轻松建设大规模网站;可通过次级域名建立子站群,各子站后台管理权限分离;可以按功能或...

    jeecms 网站开发源码

    · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录 JEECMSv5新增完善功能列表: 1、批量移动文章 2、加强采集功能 3、招聘/应聘 4、在线调查问卷/答卷 5、编辑器...

    Acunetix Web Vulnarability Scanner 11.0.17095.1158 Retail

    Acunetix Web可扩展性扫描器11.0.17095....- 易于使用的登录序列记录器,允许自动爬取和扫描复杂的密码保护区域,包括多步骤,单点登录(SSO)和基于OAuth的网站。 - 轻松生成针对开发商和业主的各种技术和合规性报告

Global site tag (gtag.js) - Google Analytics