专业的JAVA编程教程与资源

网站首页 > java教程 正文

ASP.NET中的单点登录

temp10 2024-11-20 21:45:51 java教程 13 ℃ 0 评论

背景

对于大多数的web应用程序,很多人喜欢采用表单验证的方法。当许多应用程序运行在一个主域下面的多个子域时,使用单点登录将是很不错的一个选择,当用户在www.exapmle.com登录之后,可以访问everything.example.com的资源。

表单验证默认不支持这种特性,但是,通过合适的方法调整它并不复杂。

ASP.NET中的单点登录

ASP.NET表单验证的技术内幕并不复杂:它创建了一个特殊的Cookie,这个cookie的名字由web.config中的forms元素的name定义,它包含加密的验证数据,该cookie默认的名字是.ASPXAUTH。

出于保护用户隐私和安全的原因,cookie默认和主机名关联。但是cookie的机制支持一台主机的cookie在该主机所在域内被接受,意味着主机server1.example.com的cookie可以在整个example.com中使用。

可以设置二级域和三级域的cookie,但是不允许设置顶级域的cookie,例如设置.com的cookie就是不允许的。

下面开始进行设置,看需要进行什么工作。

开始设置

和其它的应用程序一样,必须先在system.web中设定authentication,例如:

<authentication mode="Forms"> 
	<forms name="DomainLoginAuth" lginUrl="http://www.example.com/Login.aspx" protection="All"/> 
</authentication> 

和其它的应用程序一样,必须先在system.web中设定authentication,例如:

<machineKey
	validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141"  
	decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099"
	validation="SHA1" />

开始登录验证

必须在将验证cookie发送给客户之前,为cookie附加域信息,代码如下(假定用户名和密码已经经过验证并且使用的用户名存储在userName变量中):

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, false);
authCookie.Domain = "example.com";
Response.Cookies.Add(authCookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false);

注销

通常,用户注销时不需要进行什么设定,只要调用FormsAuthentication.SignOut()即可,但是这个函数不能处理域的cookie。

因此,应该手工删除这个cookie,手工删除这个cookie的唯一方法是将cookie的过期时间设定为过去的时间,参考如下的代码:

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
authCookie.Domain = "example.com";
authCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(authCookie);

好了,现在你的应用程序可以进行单点登录了。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表