ibcadmin 发表于 2012-12-6 13:53:48

ASP.NET安全机制(三)基于用户名的安全机制

在登录页面中,用户输入用户名和密码,提交该页面送回服务器,应用程序根据存储在数据库中的数据来验证请求,用户通过验证后,ASP.NET发出一个Cookie,里面包括了为此用户产生的一个有效的身份票据,该身份票据是用户进行系统访问的“通行证”。在随后发出的请求页面的请求报头里包含此Cookie,如果没有通过验证则用户被重新定位到登录页面。添加票证参考下面的方法。代码演示:基于用户名的身份验证票证
/**
* 登录页面代码
* 添加票证
*/
protected void btnLogin_Click(object sender, EventArgs e)
{
    string loginname = this.txtLoginName.Text;
    string loginpwd = this.txtLoginPwd.Text;

    if (loginname == "admin" && loginpwd == "123456")
    {
      System.Web.Security.FormsAuthentication.SetAuthCookie(loginname, false);   ①
      Response.Redirect("Main.aspx");
    }
}

/**
* 主页面代码
* 删除票证
*/
protected void btnLogout_Click(object sender, EventArgs e)
{
    System.Web.Security.FormsAuthentication.SignOut();   ②
    Response.Redirect("UserLogin.aspx");
}代码解析:① 添加票证,即当前登录用户信息记录于Cookie中,以备后序访问中的验证。SetAuthCookie方法的第一个参数,是指已经经过验证的用户名,第二个参数,是指是否添加cookie持久验证。② 删除票证,相当于注销操作,需要手动跳转页面。保存上面代码,运行后效果如下图所示:



提示在进行身份验证和权限控制的时候,如果当前访问被拒绝的话,除了页面资源之外,图片资源以及样式资源也会被拒绝访问。我们可以将资源分类,把允许匿名访问的资源放到一个单独的文件夹中,然后在这个文件夹中放入一个web.config,开发当前文件夹的访问权限。

² 结合Forms身份验证在web.config中结合Forms可以进行高级验证,在一些对安全性要求不高的应用程序,还可以将身份验证信息存储到配置文件中进行验证。

//web.config文件
<authentication mode="Forms">
<forms name="myForm" loginUrl="UserLogin.aspx" timeout="10">
    <credentials   ① passwordFormat="Clear"   ②>
      <user name="admin" password="123"/>   ③
    </credentials>
</forms>
</authentication>

//ASP.NET代码
protected void btnLogin_Click(object sender, EventArgs e)
{
    string loginname = this.txtLoginName.Text;
    string loginpwd = this.txtLoginPwd.Text;

  if (System.Web.Security.FormsAuthentication.Authenticate(loginname,
  loginpwd))   ④
    {
      System.Web.Security.FormsAuthentication.SetAuthCookie(loginname, false);
      Response.Redirect("Main.aspx");
    }
}代码解析:① <credentials>配置节允许在配置文件中定义登录名和密码。② passwordFormat属性用于指定存储密码的加密格式。可以指定为Clear(指定密码不加密)、MD5(指定使用MD5哈希算法给密码加密)、SHA1(指定使用SHA1哈希算法给密码加密)三种格式,默认为SHA1。③ <user>配置节用来存储指定的登录名和密码。④ Authenticate方法可以校验与配置文件中存储的密码信息是否一致。
页: [1]
查看完整版本: ASP.NET安全机制(三)基于用户名的安全机制