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

艾伟:ASP.NET安全问题--Forms验证(后篇)--实战篇

2011-08-28 23:55 375 查看
验证流程讲述

我们首先假设一个场景:用户现在已经打开了我们的首页Default.aspx,但是有些资源只能是登录用户才可以看到的,那么如果这个用户想要查看这些资源,那么他就要登录。而且这个用户已经有了一个帐号。(我们本篇主要的话题是身份验证,至于创建用户账户是怎么创建的,我们不关心,方法很多,如直接一个数据库插入就行了!)

我们现在就把我们的一些流程说下:
1.用户登录,在输入框中输入用户名和密码信息
2.点击登录按钮后,到数据库中查询该用户是否存在
3 如果存在,服务器端代码就创建一个身份验证的票据,保存在cookie中,然后发送到客户端的浏览器
4.用户已经有了验证的cookie,那么就页面就跳转到用户之前请求的页面

数据库准备

那么下面我们就开始详细讲述:
首先,我们我们肯定要先得创建一个数据库,我们就取名为Login表,创建一个用户信息表,我们在在表中建立三个字段UserName,UserPassword,UserRole(大家可以创建更多字段,我这里只是演示,大家可以扩展的). 至于表中的数据,大家自己随便插入几条!

代码编写 因为我们常常要验证用户,所以我们把验证用户的代码写成一个方法放在App_Code目录下的Helpers.cs类中
代码如下:

Code
Code
void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;

//获取身份验证的cookie
HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];

if (cookie != null)
{
string encryptedTicket = cookie.Value;

//解密cookie中的票据信息
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt(encryptedTicket);

//获取用户角色信息
string[] roles = new string[]{ticket.UserData.toString()};

//创建用户标识
FormsIdentity identity = new FormsIdentity(ticket);

//创建用户的主体信息
System.Security.Principal.GenericPrincipal user =
new System.Security.Principal.GenericPrincipal(identity, roles);
app.Context.User = user;
}
}
我们看到最后一行代码:app.Context.User = user;,把用户的身份以及角色信息保存在了User属性中。

我们就可以在页面中通过如下方法判断用户是否登录了:

if (Page.User.Identity.IsAuthenticated)
{
//
}
用下面的方法判断用户是否属于某个角色:

if (Page.User.IsInRole("Admin")
{
//
}
其实这个我们之前讲过了的Identity,IPrincipal概念有关,不清楚的可以看看之前的文章!

代码到这里,今天也写完了,有关身份验证的问题就要讲完了,还差一个问题没有讲述:自定义身份验证以及开发自定义的HttpModule.

之后的的文章将讲述授权的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: