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)
{
//你已通过验证,
}