asp.net的安全模型已经做得很好了,在此我只对这几种身份验证的方法做个比较
完全出自我个人的观点,如有不妥之处还望指正
asp.net中的身份验证方法:
1.窗体验证
2.windows验证
3、护照验证
4、自定义身份验证
对于窗体身份验证我觉得是一种比较方便的验证方法,你可以自定义角色,且其步骤比较简单
窗体身份验证的步骤
1、在web.config文件中将安全验证模式配置为窗体身份验证
<authentication mode="Forms" >
<forms name="check"
loginUrl="login.aspx"
protection="All"
timeout="20"
path="/"></forms>
</authentication>
注意这里的path设置为"/",login.aspx为你的窗体登陆页面,一会要在这个页面上生成身份票证
2、建立登陆页面
创建一个登陆页面,检验用户名密码(对密码的加密在这里就不再讨论了)而后将用户的身份信息存入(经过加密)存入用户cookie中(注意设置cookie的过期时间)以下是主要代码,这是我自己的程序,如要引用需要改写
string role=AccountManager.GetRole(this.TextBox_username.Text.Trim());
FormsAuthenticationTicket authTicket=new FormsAuthenticationTicket(1,this.TextBox_username.Text.Trim(),DateTime.Now,DateTime.Now.AddMinutes(20),false,role);
string encryptedTicket=FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie=new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);
Response.Cookies.Add(authCookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl(this.TextBox_username.Text.Trim(),false));
3、在global.asax中对Application_AuthenticateRequest事件进行定义
主要是对用户的身份票证进行解密,而后将其加入到用户的http上下文中
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string cookiename=FormsAuthentication.FormsCookieName;
HttpCookie authcookie=Context.Request.Cookies[cookiename];
if(authcookie==null)
{
return;
}
FormsAuthenticationTicket authticket=null;
try
{
authticket=FormsAuthentication.Decrypt(authcookie.Value);
}
catch(Exception)
{
return;
}
if(authticket==null)
{
return;
}
string[] roles=authticket.UserData.Split(new char[]{'|'});
FormsIdentity id=new FormsIdentity(authticket);
GenericPrincipal principal=new GenericPrincipal(id,roles);
Context.User=principal;
}
4、在你要限制的文件夹中或是在你的代码中加入授权控制
如要对一个文件夹进行授权则在该文件夹中写入一个web.config文件,示例如下
<configuration>
<system.web>
<authorization>
<allow roles="administrator" />
<deny users="*"/>
</authorization>
</system.web>
</configuration>
应该都能看懂吧
或是在代码中加入授权控制
通过检测用户http上下文中的用户名和角色进行控制
HttpContext.Current.