:: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于Form认证

Posted on 2011-12-05 21:44 托雷宽 阅读(337) 评论(0)  编辑 收藏 引用 所属分类: ASP .NET
ASP.NET 的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。
一.部署运用Form认证
1:新建一个测试项目(暂且为“FormTest”吧),包含三张页面(Default.aspx、Login.aspx、UserInfo.aspx)
2:修改web.config
   1).认证字段
<authentication mode="Forms">
   <forms loginUrl="Login.aspx" name=".ASPXAUTH">
   </forms>
</authentication>
   2).权限字段
<authorization>
   <deny users="?">
   </deny>
</
authorization>
写在<system.web>节下,如果想写在<configuration>节下方便管理需要如下格式
<location path="(需要访问控制的文件夹或页面文件)">
   <system.web>    
      <authorization>
         <deny users="?">
         </deny>
      </authorization>
   </system.web>
</location>
3.编写登陆和退出的.CS代码
1).指验证后返回请求页面
   private void Btn_Login_Click(object sender, System.EventArgs e)
   {
      if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text=="123456")
      {
            System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.Txt_UserName.Text,false);
      }
   } 
2).
通过验证后就直接发放 Cookie ,跳转页面将由程序员自行指定,此方法多用于 Default.aspx 使用框架结构的系统
   private void Btn_Login_Click(object sender, System.EventArgs e)
   {
      if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text=="123456")
      {
            System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);
            Response.Redirect("Default.aspx");
      }
   }
3).使用用户凭证
 protected void Logon_Click(object sender, EventArgs e)
    {
        if ((UserEmail.Text == "admin" && UserPass.Text == "123123") ||
            (UserEmail.Text == "user" && UserPass.Text == "123123")) //允许通过验证的用户,这部分可以使用数据库用户验证替代
        {
            //初始化一个用户凭证的实例
            FormsAuthenticationTicket myTicket;

            //根据不同的用户名分配不同的role(这部分可以通过数据库role读取来替代)
            if (UserEmail.Text == "admin")
                myTicket = new FormsAuthenticationTicket(1, UserEmail.Text, DateTime.Now, DateTime.Now.AddMinutes(60),false, "admin");
            else
                myTicket = new FormsAuthenticationTicket(1, UserEmail.Text, DateTime.Now, DateTime.Now.AddMinutes(60), false, "user");

            string encryptedTicket = FormsAuthentication.Encrypt(myTicket); //加密用户凭证

            //把用户凭证存入Cookie ,FormsAuthentication.FormsCookieName参数位于config文件中Form认证的name属性
            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);

            //添加Cookie
            Response.Cookies.Add(authCookie);

            //跳转默认重定向的默认 URL具体见Web.Config的配置
            Response.Redirect(FormsAuthentication.GetRedirectUrl(UserEmail.Text, Persist.Checked));

        }
        else
        {
            Msg.Text = "用户名密码出错,请重试";
        }

    }
  使用:
 Welcome.InnerHtml = "Hello, " + Server.HtmlEncode(User.Identity.Name); //输出用户名

        FormsIdentity id = (FormsIdentity)User.Identity;  //获取用户标识
        FormsAuthenticationTicket ticket = id.Ticket;
//显示用户凭证中的相关属性
        cookiePath.Text = ticket.CookiePath;
        expireDate.Text = ticket.Expiration.ToString();
        expired.Text = ticket.Expired.ToString();
        isPersistent.Text = ticket.IsPersistent.ToString();
        issueDate.Text = ticket.IssueDate.ToString();
        name.Text = ticket.Name;
        userData.Text = ticket.UserData;
        version.Text = ticket.Version.ToString();
4).退出
   private void Btn_LogOut_Click(object sender, System.EventArgs e)
   {
      System.Web.Security.FormsAuthentication.SignOut();
   }
4.如何判断用户是否已经登陆及获取用户信息
   if(User.Identity.IsAuthenticated)
   {
      //你已通过验证,
   }




只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理