身份验证
ASP.NET中身份认证有如下几种方式:
(1)Windows:使用Windows操作系统和NTFS文件系统验证,适合公司内部站点使用,不适合大众商业站点 。
(2)Forms:利用网页向客户端发送凭证,客户端再把凭证提交给应用程序进行身份验证(使用最普遍)。
(3)passport:一种单点登录标准(微软提供使用付费国内应用较少)。
本教程主要讲解Forms身份验证:
(1) 在配置文件中进行配置身份验证,(用户凭证分别使用明文和MD5进行演示),只有输入了正确用户名和
密码才能访问网站页面。
(2) 在配置文件中配置目录访问规则,登录所有用户可以访问页面,某些登录用户可以访问VIP目录,某些登录
用户可以访问Admin用户。
一、网站目录结构
后面所有的测试案例都是基于以下网站目录结构为基础来进行的。
二、阻挡所有匿名访问
在配置文件中进行配置身份验证,(用户凭证分别使用明文和MD5进行演示),只有输入了正确用户名和密码才
能访问网站页面。
(1)网站根目录中配置身份验证信息。
在<system.web>节点中新增如下配置,此用户凭证也可以在数据库中存储用户名和密码。
<!--设置身份验证信息-->
<authentication mode="Forms">
<!--设置验证页面和默认跳转地址-->
<forms loginUrl="Login.aspx" defaultUrl="Index.aspx">
<!--用户凭证(用户名&密码) passwordFormat="Clear":明文-->
<!--<credentials passwordFormat="Clear">
<user name="liubei" password="123456"/>
<user name="guanyu" password="123456"/>
<user name="zhangfei" password="123456"/>
<user name="zhaoyun" password="123456"/>
<user name="machao" password="123456"/>
<user name="mahuateng" password="123456"/>
</credentials>-->
<!--用户凭证(用户名&密码) passwordFormat="Clear":明文-->
<credentials passwordFormat="MD5">
<user name="liubei" password="E10ADC3949BA59ABBE56E057F20F883E"/>
<user name="guanyu" password="E10ADC3949BA59ABBE56E057F20F883E"/>
<user name="zhangfei" password="E10ADC3949BA59ABBE56E057F20F883E"/>
<user name="zhaoyun" password="E10ADC3949BA59ABBE56E057F20F883E"/>
<user name="machao" password="E10ADC3949BA59ABBE56E057F20F883E"/>
<user name="mahuateng" password="E10ADC3949BA59ABBE56E057F20F883E"/>
</credentials>
</forms>
</authentication>
(2)访问规则授权控制,在<system.web>节点中新增如下配置
<!--设置访问规则授权-->
<authorization>
<deny users="?"/> <!--deny:拒绝访问,?:匿名用户-->
</authorization>
(3)登录页面代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>登录</h1>
<p>
账号:<asp:TextBox ID="txtAccount" runat="server"></asp:TextBox>
</p>
<p>
密码:<asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox>
</p>
<p>
<asp:Button ID="btnLogin" runat="server" Text="登录" onclick="btnLogin_Click"/>
</p>
</div>
</form>
</body>
</html>
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
#region 用户登录
protected void btnLogin_Click(object sender, EventArgs e)
{
//根据配置文件进行登录用户名密码的判断(如果数据库存储用户名密码,用户名密码判断也可以从数据库读取)
if (System.Web.Security.FormsAuthentication.Authenticate(this.txtAccount.Text, this.txtPwd.Text) == true) //登录成功
{
//方案一:
//System.Web.Security.FormsAuthentication.SetAuthCookie(this.txtAccount.Text, false);
////如果访问其它页面,没有凭证,会自动跳转到登录页面,并返回ReturnUrl,记录访问地址
//if (Request.QueryString["ReturnUrl"] == null)
//{
// Response.Redirect("Index.aspx");
//}
//else
//{
// Response.Redirect(Request.QueryString["ReturnUrl"]);
//}
//方案二:
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.txtAccount.Text, false);
}
else
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "<script>alert('用户名或密码错误!');window.location.href='Login.aspx';</script>");
}
}
#endregion
}
三、配置目录访问权限
(1)如果需要配置所有匿名用户和mahuateng都不能访问网站,则<system.web>节点中新增如下配置:
<!--设置访问规则授权-->
<authorization>
<deny users="?,mahuateng"/> <!--deny:拒绝访问,?:匿名用户(代表匿名用户和mahuateng不能访问页面)-->
</authorization>
(2)如果人员角色如下:
【1】liubei,guanyu,zhangfei公司领导。
【2】zhaoyun,machao普通员工。
【3】mahuatengIT管理员
普通员工只能访问根目录Index,公司领导访问根目录Index和VIP所有内容,IT管理员只能访问Admin所有内容
则可以在<configuration>节点中配置如下:
<!--配置VIP目录访问规则授权-->
<location path="VIP">
<system.web>
<authorization>
<deny users="?,zhaoyun,machao,mahuateng"/>
</authorization>
</system.web>
</location>
<!--配置目录访问规则授权,此配置也可以直接写在目录的web.config中-->
<location path="Admin">
<system.web>
<authorization>
<allow users="mahuateng"/>
<deny users="*"/>
</authorization>
</system.web>
</location>