您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > ASP-NET-实现多站点统一登录
现在网络上的身份验证一般都是采用用户名+口令的形式,几乎每到一个提供服务的网站都要求进行验证登录。随着网络身份的增多,这也会造成用户名与口令记忆上的负担,另外多次的输入也存在安全隐患(输多了,被盗的机会也多)。单点登录就是为了解决这些问题而产生的,它指的是在一个地方登录就可以到处通行。(哇靠,发现自己老了几岁,另起一段,讲点实际的)。我们公司有几个网站需要维护,每个站点都具有一个登录口,我们发现这样很不方便,所以第一步就是统一这些登录口。虽然所有的源代码都可以控制,我们可以把所有站点改成一个站点,这样就不存在这个问题了,只是这样不符合要求,所以当时(几前天)只能另想办法。我们找到了微软的Passport,发现有点麻烦,要申请Web服务(也许并不麻烦,因为没有用过,新技术总让人感觉神秘嘛),就决定不用它,就几点站点,不想劳师动众。后来同事(我的经理)找到了一篇相关的文章,在ASP.NET下,只要在Web.config下配置machineKey节,可以解决这个问题(我是指我们公司的这个问题)。在.NETFrameworkSDK文档中,ASP.NET设置架构篇中,可以找到machineKey的相关内容:对密钥进行配置,以便将其用于对Forms身份验证Cookie数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。该节可在计算机、站点和应用程序级别声明,但不在子目录级别声明。configurationsystem.webmachineKeymachineKeyvalidationKey='...'decryptionKey='...'validation=''/我们知道Http是无连接协议,而Cookie可以标识特定站点的用户信息,ASP.NET在默认情况下也一样,即使是Session在默认情况下也是基于Cookie的,所以如果一个站点的Cookie能被另一个站点识别,不就可以...正常情况下,ASP.NET的Forms验证一般是这样做的,受保护页面根据权限分组放进不同的文件夹中,然后在各自文件夹的web.config中对这些文件进行访问保护.例如管理员访问的各个页面,我一般会放进一个Admin目录中,然后在Admin目录下的Web.config中的authorization节中配置它的访问权限,像下面这样:configurationsystem.webauthorizationdenyusers=?/!--不允许匿名用户访问--...如果某用户不幸访问了这些页面应该让页面重定向到Login.aspx中,这需要在根目录的Web.confg中进行一些配置,最简单的情况应该像下面这样:configurationsystem.webauthenticationmode=FormsformsloginUrl=~/login.aspx//authentication题外话:如果要对站点的图片进行访问控制,也可以像上面这么做,因为许多站点并不想让其它用户仅仅知道地址就可以直接访问图片信息.但是这样还不够,需要在IIS中配置一下对图片资源的接管,就像.aspx是由aspnet_isapi.dll处理的,你应该让图片也经由它手.下面就可以进行用户名/密码验证了.if(用户名/密码验证通过){System.Web.Security.FormsAuthentication.RedirectFromLoginPage(.LOGINAUTH1,false);}这样,如果你首先访问了受保护页面,它将会重定向到登录页面中,而你在这里登录后,它将自动重定向到先前的受保护页面.如果一开始你访问的就是登录页面,那么登录后,默认情况下,它会将页面重定向到default.aspx.以上讲这么多登录的东东,但是原本是讲单点登录的,其实我并没有离题,只是如果你到了这一步,那么只需要在两个,或多个站点的WebConfig中配置一下machineKey就可以让其共享Cookie,在一个站点中登录,也就相当于在另一个站点中登录,退出也一样.machineKey配置节文档如下:machineKeyvalidationKey=AutoGenerate|value[,IsolateApps]decryptionKey=AutoGenerate|value[,IsolateApps]validation=SHA1|MD5|3DES/其中validationKey是用于验证加密数据的密钥,手动配置时,推荐用128个十六进制字符decryptionKey是用于加密数据的密钥,这个的长度和加密类型(也就是第三个参数)相关,比如选3DES则这里是48个16进制字符validation是数据验证使用的加密类型OK,写配置节前,我们还需要两个长长的十六进制串呢,当我用键盘敲了10几下后,发现自己是笨蛋,应该让脚本帮助生成的,否则即不随机,又慢,而且长度还可能搞错.如果你也用Python,那么可以用以下语句得到128位十六进制串,呵呵相当的简单和方便:importrandoms=''foriinrange(128):s+='%X'%(random.randint(0,15))else:prints配置节信息,像下面这样(难看死了:()machineKeyvalidationKey=F65E3D075FFCE2AC48F6B0ABB73BA4FAC05E7F10BBE765520EA75F4E210126F01A62BE39B1059857A10A54FE210A14E7FD685A1040E8033202107424AFE2B443decryptionKey=C5475E1B28958DC6373DAA37C5B92CCDD94ECDF02D7A6A66validation=3DES/你需要在两个或多个站点上都具有相同的machineKey配置信息,才能产生效果.哦,对了,其实这种方法只能解决几个站点的登录问题,但不能代替passport,,想想全世界的站点配置成一样(哦,当我没说过)我没用过passport,但看了看一些相关文献,知道大概怎么回事.就是让登录(专业一点说是身份验证)由专门的人(一个机构,如passport)去做,而普通站点只做服务就行了.这样访问相当于以下流程:1.访问一站点(服务站点)的页面,2.服务站点去验证站点上问问,该用户有没有已登录3.如果已登录了,那么正常服务,流程结束4.如果没有登录,那么把该用户重定向到验证站点.5.用户在验证站点上验证登录,一般也是输入用户名和密码验证6.验证站点将验证通过的用户重定向到先前的服务页面请原谅,英语不好,看了一篇长长的东东,就理出这点东西其实这中间有很多技术的细节要处理,数据的验证,以及传递过程一定很复杂.文中说,Passport是采用Kerberos认证机制来工作的(不要问我这是什么,我也不知道).哦,对了,除了passport还有一个LibertyAlliance组织也有个单点登录.有空我会去再看看的.==========================================================================================================asp.net跨域单点登录实现原理:当用户第一次访问web应用系统的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。登录站点的两种情形:情形一、匿名用户:匿名用户访问分站a上的一个授权页面,首先跳转到主站让用户输入帐号、密码进行登录,验证通过后产生主站凭证,同时产生Token,跳转回分站a,此时分站a检测到用户已持有Token,于是用Token再次去主站获取用户凭证,获取成功后允许用户访问该授权页面。同时产生分站a的本地凭证,当该用户需要再次验证时将先检查本地凭证,以减少网络交互。情形二、在分站a登录的用户访问分站b:因为用户在分站a登录过,已持有Token,所以分站b会用Token去主站获取用户凭证,获取成功后允许用户访问授权页面。同时产生分站b的本地凭证。===============================================================================================================理解ASP.NET2.0中的单点登录Published:16Jan2008摘要在这篇文章中,Masoud讨论了应用ASP.NET中统一身份验证模型进行跨应用程序验证的问题,包括:MembershipProviders,web.config配置,配置文件的加密解密等。在文章的最后,作者提供了通过ASP.NETlogincontrols来验证的程序。byMasoudTabatabaei:目录简介什么是SSO?它是怎样工作的?系统条件工作下载结论简介通常在你要实现ASP.NETweb应用程序的身份验证时,你需要为你的每一个应用程序创建一个登录页面。想象一下,如果你有两个或者更多的互相关联的web应用程序,你可能希望通过某种机制为你的所有带关联的应用程序实现仅出现一次登录页面。这样,一旦你登录了一次,你就可以浏览所有的关联程序,而不再需要额外的登录了。单点登录(SSO)就是这样的访问控制机制,它允许一个用户通过一次验证就可以访问所有软件系统资源。试想你在你的服务器上创建了两个或者更多的web站点。就像其他的web站点一样,你只是使用ASP.NET权限验证机制来验证你的用户。那么,你的这些站点可能需要一个或更多的登录页面。现在你正试图证明怎么样通过更改你的配置来实现跨程序登录。换句话说,我们只想给我们的程序配置一个登录页面,并且一旦用户通过了验证,他就可以浏览其他所有的站点,而不需要另外的登录。在这篇文章的附录中,你也可以看到如何加密你的配置文件。什么是单点登录?它是怎样工作的?在许多的公司里,他们有一些以web站点或web应用程序为表现层的系统。自然,由于安全议题他们将需要通过基于ASP.NET2.0,通过MembershipProvider和RoleProvider或者定制实现权限验证和权限验证系统。不论怎样,所有的站点都会默认有一个确定用户的ID和密码在数据库中是否有效的”login.aspx”web窗体.当你只有一个站点或者这些站点都是独立运行时,这样做是没有问题的。但是当你有两个或多个站点,而且站点间是关联在一起或链接在一起的,你没准就会问:为什么每个应用程序你都必须登录一次?为什么你不可以只有一个”login.aspx”来实现验证,并让所有不关联程序真正统一起来。幸运的是,在ASP.NET2.0中你可以通过同样的配置来实现跨应用程序访问,不论是你的新的站点还是已经存在的站点。在ASP.NET配置文件(web.config)中有一个配置节(在system.web中)命名为machineKey,负责加密和解密窗体(这些窗体可以读窗体权限验证cookies)权限认证的cookie数据
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:ASP-NET-实现多站点统一登录
链接地址:https://www.777doc.com/doc-6140246 .html