至于什么是单点登录,举个例子,如果你登录了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.com/
,http://www.hotmail.com/
,这两个站点就没有共同的父域,而仍然可以共用登录,怎样才能实现呢?请参考下图,由于这种情况ticket比较复杂,我们暂时把P站点创建的的ticket叫做P-ticket,而A站点创建的ticket叫A-ticket,B的为B-ticket
由于站点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
怎么删除cookie:本来以为这个不是问题,不过还是有朋友问道,简单的说其实是创建一个和你要删除的cookie同名的cookie,并把
cookie的expire设为当前时间之前的某个时间,不过在跨子域的删除cookie时有一点要注意:必须要把cookie的域设置为父域,在本文中
为yizhu2000.com
为了保证各个环节的传输的安全性,最好使用https连接
分享到:
相关推荐
用J2EE的技术(JSP和Servlet)完成了一个具有Web-SSO的简单样例。样例包含一个身份认证的服务器和两个简单的Web应用,使得这两个 Web应用通过统一的身份认证服务来完成Web-SSO的功能
从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从...
#web-sso单点登录 参考 本文内容仅供自己学习,作为学习笔记。如若需要,可以前往: ##提供另外一个简单的单点登录思想:: 比如存在3个域名a.com,b.com,c.com.其中a.com作为主域名,不论b.com还是c.com登录时请求都...
【Laravel开发-discourse-sSO-laravel】 Laravel是一个基于PHP的开源Web应用程序框架,以其优雅的语法和强大的功能而闻名。它为开发者提供了一种高效的方式来构建可维护且易于扩展的Web应用。"Laravel开发-...
XXL-SSO XXL-SSO, A Distributed Single-Sign-On Framework. -- Home Page -- ...It has "lightweight, scalable, distributed, cross-domain, Web APP support access" features. Now, it's alr
本项目"laravel开发-sso-broker"旨在利用Laravel构建一个SSO代理,基于Jasny/SSO库,以实现跨多个Laravel应用的SSO功能。 **1. Jasny/SSO 库介绍** Jasny/SSO是由荷兰开发者Arnout Boks创建的一个轻量级的SSO解决...
XXL-SSO,一种分布式单点登录框架。 介绍 XXL-SSO是一个分布式单点登录框架。 您只需登录一次即可访问所有受信任的应用程序系统。 它具有“轻量级,可伸缩,分布式,跨域,Web + APP支持访问”功能。 现在,它已经...
《Python库深度剖析:django-admin-sso-0.1.1》 在IT行业中,Python以其简洁、易读的语法和强大的库支持成为了后端开发的热门选择。Django,作为Python的一个优秀Web框架,更是备受开发者青睐。本文将深入探讨一个...
在"xxl-sso-master.zip"压缩包中,包含的就是XXL-SSO 的源代码和相关配置文件,开发者可以深入研究其内部实现,根据自己的需求进行定制和扩展。这不仅有利于理解SSO的工作原理,也便于将其集成到现有的系统中,提升...
本文将围绕从PyPI官网下载的"mypy-boto3-sso-1.16.27.0.tar.gz"这一资源进行详细解析,深入探讨mypy-boto3-sso库的特性和应用场景。 首先,mypy-boto3-sso库是为Python的Boto3库提供类型注解和静态类型检查支持的一...
而token,尤其是JWT(JSON Web Token),则是一种轻量级的认证协议,它将用户信息编码为一个字符串,包含了签发时间、过期时间和用户信息,服务器验证token的有效性后即可确认用户身份。这两种方式各有优劣,cookie...
标题"PyPI 官网下载 | django-simple-sso-0.5.1.tar.gz"指的是在Python的包索引服务(PyPI)官网上下载的一个名为`django-simple-sso`的软件包,其版本号为0.5.1,并且是以tar.gz格式打包的压缩文件。描述进一步确认...
《PyPI官网下载:mypy-boto3-sso-1.16.32.0.tar.gz——Python库解析》 PyPI(Python Package Index)是Python开发者们分享和获取Python软件包的主要平台,它是Python生态系统的核心组成部分。在这个平台上,我们...
《PyPI官网下载的mypy-boto3-sso-1.16.10.0.tar.gz:Python库解析与应用》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python开发者提供了无数的第三方库,极大地丰富了Python的功能。在...
标题中的"PyPI 官网下载 | django-sso-app-0.3.1.tar.gz"表明这是一个在Python的包索引服务(PyPI)上发布的软件包,名为`django-sso-app`,版本号为0.3.1,且是以tar.gz格式提供的压缩文件。PyPI是Python开发者发布...
《PyPI官网下载:mypy-boto3-sso-admin-1.17.64.1.tar.gz——Python库解析》 在Python的世界里,PyPI(Python Package Index)是最重要的软件仓库,它为开发者提供了丰富的第三方库资源。本文将详细解析标题为...
mypy-boto3-sso-oidc库是专门为使用Boto3(Amazon Web Services (AWS) 的Python SDK)的开发者设计的,旨在增强SSO(Single Sign-On)和OIDC(OpenID Connect)的身份验证功能。这个库的核心价值在于简化了与AWS SSO...
标题中的“PyPI 官网下载 | aws-cdk.aws-sso-1.106.0.tar.gz”表明这是一个从Python Package Index(PyPI)官方源下载的软件包,名为`aws-cdk.aws-sso`,版本号为1.106.0,其格式为tar.gz压缩文件。PyPI是Python...
《PyPI官网下载:mypy-boto3-sso-1.17.56.0.tar.gz——Python库解析》 PyPI(Python Package Index)是Python开发者们分享和获取Python软件包的主要平台,它是Python生态系统的核心组成部分。在这个平台上,我们...