您的位置:首页 > 编程语言 > ASP

ASP.NET安全问题--Froms验证的具体介绍(中篇)

2009-12-05 21:55 323 查看
前言:今天是端午节,大家节日快乐!别忘了过我们的传统节日!!!因为前一篇文章已经谈论了与Forms验证有关的一些理论的知识,所以本篇主要讲述Forms验证一般的使用方法,也给出一些代码。可能有些话题之前园子里有朋友谈论过,如果有重复,那么就权当是复习也行!

本篇的话题如下:
启用Forms身份验证
用户信息的存储
web.config配置的一些用法
Forms验证简单的功能介绍
Forms验证中的Cookie问题

启用Forms身份验证 相信大家对很清楚如何启用 Forms验证,但是这里我还是罗嗦一下。
我们只要在 web.config文件中配置如下就行了:

<authentication mode="Forms"/>

这样之后,ASP.NET运行时就知道我们启用了Forms验证,在生命周期的验证阶段就激活FormsAuthenticationModule模块。

还有一点要特别注意:<authentication/>元素节点只能在应用程序的根文件夹中的 web.config中配置。如果在子文件夹中使用这个节点就会报错。这也说明了每个应用程序只能定义一个身份验证类型。

而且在<authentication/>节点中,我们还可以进行更多的设置。如下:

Code
protected void btnLogin_Click(object sender, EventArgs e)
{

if (FormsAuthentication.Authenticate(txtUserName.Text, txtUserPasswork.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);
}
else
{
throw new Exception("登录失败!!!");
}
}

代码的前提是:我们把用户的信息存放在了web.config文件中,因为我们用了Authenticate方法。
首先代码就判断提供的用户名和密码是否正确,如果正确,那么就通过了验证,那么我们就调用RedirectFromLoginPage就把用户定位了他们最初请求的页面。
注意:当我们调用RedirectFromLoginPage方法时,RedirectFromLoginPage就创建一个身份验证的票据,即把用户的信息写入票据中,并且加密,并把票据写入cookie,然后就把用户定位了他们最初请求的页面。我们只是写了一行代码就实现了很多的功能。

还有一点就是RedirectFromLoginPage方法的第二个参数指出了是否应该创建一个持久性的cookie,即用户关闭浏览器后依然保留cookie。我们常常实现"记住我"的功能就是传入了true.

当我们登录了之后,要注销也只要一行代码:

protected void btnloginOut_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
}

Forms验证中的Cookie问题

之前我们所见到的示例都是利用非持久性的身份验证cookie来维持请求之前的身份验证。这就意味着:如果用户关闭浏览器,cookie就期满失效,下次还需要在此登录。从安全的方面还说,这是个好事。

身份验证cookie中保存的身份验证票据是ASP.NET应用程序识别用户的工具。例如,如果一个用户拥有一个管理员的有效验证票据,那么我们的ASP.NET网站就会认为这个用户就是管理员。

尽管使用持久化的身份验证cookie风险很大,但是还是有很多的用处的。例如,如果我们只是仅仅为了区别不同的用户,而不是对受限资源的访问进行限制,那么我们就不要求用户在每次访问站点时都登录,这样我们就可以利用持久化的cookie,而且创建持久化的cookie也很简单,如我们之前用的RedirectFromLoginPage,只要把方法的第二个参数设置为true就行了。

除此之外,创建持久化的身份cookie,我们还可以使用SetAuthCookie,并且把第二个参数设置为true。如下:
FormsAuthentication.SetAuthCookie(txtUserName.Text, true);

持久化的cookie只有在调用了FormsAuthentication.SignOut();方法之后才会过期。并且持久化的cookie不会受到web.config中的<forms>节点中设置的超时的影响。如果我们希望持久化的cookie超时,我们就要调用FormsAuthentication类的GetAuthCookie方法,设置cookie的期满日期和时间,并且我们自己手动的把它写入HTTP响应。

如下面的代码,我们创建一个时间为一周的持久化的cookie(代码加了注释):

protected void btnLogin_Click(object sender, EventArgs e)
{
//判断用户提供的验证信息是否正确
if (FormsAuthentication.Authenticate(txtUserName.Text, txtUserPasswork.Text))
{
//创建一个持久化的身份验证cookie
HttpCookie cookie = FormsAuthentication.GetAuthCookie(txtUserName.Text, true);

//设置cookie的有效时间
cookie.Expires = DateTime.Now.AddDays(7);

//手动添加到HTTP响应中
Response.Cookies.Add(cookie);

//跳转到最初请求的页面
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUserName.Text, true));
}
else
{
throw new Exception("登录失败!!!");
}
}

其中GetRedirectUrl获取用户最初请求的URL

今天的就写到这里,下一篇比较深入讲述 Forms验证的一些知识!
谢谢大家的支持!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: