Asp.Net安全验证小结
1,基于windows的安全验证
web.config文件:
<configuration>
<system.web>
<authentication mode="Windows" />
<identity impersonate="true" />
<authorization>
<allow roles="BUILTIN\groupname" users="computername\UserName,computername\UserName" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
在.aspx文件中无需任何代码就可以实现验证,但可以在.aspx文件获取登陆用户的信息
需导入命名空间:System.Security.Principal
if(User.Identity.IsAuthenticated)//判断用户是否验证,似乎可有可无
{
WindowsIdentity objWinIdentity=WindowsIdentity.GetCurrent();
lblHelloMsg.Text="the name:"+objWinIdentity.Name+"<br>Type:"+ objWinIdentity.AuthenticationType+"IsInRole:"+User.IsInRole("computername\\groupname");
}
2,基于web.config forms验证
web.config文件:
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="MyApp" path="/" loginUrl="login.aspx"
protection="All" timeout="30">
<credentials passwordFormat="Clear">
<user name="kwk" password="test" />
<user name="ljx" password="test" />
</credentials>
</forms>
</authentication>
<authorization>
<allow users="kwk,ljx" />
<deny users="?" />
</authorization>
</system.web>
</configuration>
login.aspx文件:需要提供两个文本框用于填写用户和密码(txtUsr,txtPwd),一个单选框判断是否永久保存
还需要一个按钮控件则响应该button的代码如下:
void DoLogin(Object sender, EventArgs e)
{
if(FormsAuthentication.Authenticate(txtUsr.Value,txtPwd.Value))
{
FormsAuthentication.RedirectFromLoginPage(txtUsr.Value,chkPersist.Checked);
}
else
//为代码完整性而设置,可以不写
{
Response.Write("authentication fails");
}
}
然后在别的页面可以获得登陆用户的值:
if(User.Identity.IsAuthenticated)//可以不需要判断
{
Response.Write("your name:"+User.Identity.Name);
Response.Write("验证类型:"+User.Identity.AuthenticationType);//forms,windows等
}
3,基于自定义forms验证
web.config文件(基本上不需要什么设置):
<system.web>
<authentication mode="Forms">
<forms name="MyApp" path="/" loginUrl="custom-login.aspx"
protection="All" timeout="30" >
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
custom-login.aspx文件,基本原理还是跟2中说的一样,如:
if (blnIsAuthenticated) //注意这个blnIsAuthenticated是一个自己定义的变量
//当我们把用户输入的信息和数据库(或xml)的信息比对,存在则把该变量设为true,反之false
//这是跟2不一样的地方
{
FormsAuthentication.RedirectFromLoginPage(txtUsr.Value, chkPersist.Checked);
//txtUsr和chkPersist分别为textbox,checkbox控件
}
else
{
//验证失败提示信息
}
剩下的如在其他页面获得用户信息,如2一样
4,退出登陆
响应退出登陆按钮的代码:
FormsAuthentication.SignOut();
Response.Clear();
Response.Redirect(Request.UrlReferrer.ToString());//重定向到前一个页面