成员资格
目标
安全的必要性
ASP.NET的安全模式
1. Windows验证
2. Passport验证
3. Form验证
4. None验证
安全的必要性
根据所请求资源的类型,IIS能够自己处理请求,也可以不自己处理请求。如果资源请求一个ASPX页面,则IIS将请求经过身份验证用户(或匿名用户)的安全令牌一起传递给ASP.NET。接下来要发生的事情就是取决于ASP.NET的配置。
安全的必要性有三方面:
1. 构造特殊的链接地址,导致文件内的数据泄露
2. 数据库泄漏
3. 安全防范的首要策略:所有的HTTP访问都要经过IIS,所以限制IIS的安全性是关键
ASP.NET的安全模式有三种授权方法:
1. Windows身份验证:IIS验证,在内联网环境中非常有用
2. Passport身份验证:微软集中式身份验证,一次登录便可访问所有成员站点,需要收费(一般不会使用)
3. Form窗体身份验证:窗体验证,验证帐号/密码,Web编程最佳最流行的验证方式
4. None验证:表示ASP.NET自己根本不执行身份验证,完全依赖IIS身份验证
身份授权模式
基于窗体的身份验证是不允许用户访问整个应用程序或其特定资源的一种流行模式。使用它可以把登录窗体直接放在应用程序中,这样,终端用户只需要把用户名和密码输入到浏览器中的一个HTML窗体上即可。

认证和授权机制
认证是确定用户身份的过程。在用户通过了身份验证后,开发人员就可以确定该用户是否有权限继续操作。如果没有进行身份验证,就不能进行实体的授权
授权是确定已验证的用户是否有权访问应用程序中的某个部分、某个点或只访问应用程序提供的特定数据集。

Form窗体验证实例:
首先打开“Microsoft Visual Studio 2010”程序,选择文件“新建”——“项目”,弹出“新建项目”模版,创建“ASP.NET Web应用程序”,点击“确定”,
在“WebApplication1”右键点击选择“添加”——“新建文件夹”更改名称,然后在新建的文件夹中更改名称,之后
再“WebApplication1”右键点击“添加”——“新建项”弹出“添加新项”模板,然后点击“Web”在另一边选择“Web窗体”,更改名称,点击“添加”。
具体代码如下:
登录页面
具体代码:
protected void Button1_Click(object sender, EventArgs e)
{
string name = TextBox1.Text;
string pwd = TextBox2.Text;
if (name == "admin" && pwd == "123")
{
FormsAuthentication.RedirectFromLoginPage(name, false); }
else
{
ClientScript.RegisterStartupScript(this.GetType(), "Login", "alert('用户名或密码不正确,请重新输入');", true);
}
Web.config页面:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="Default.aspx">
</forms> </authentication>
<authorization>
<deny users="?"/>
</authorization>
两个方式的登陆 方法:
Login.aspx
protected void Button1_Click(object sender, EventArgs e)
{
string name = TextBox1.Text;
string pwd = TextBox2.Text;
// 多个验证登录方式
if (FormsAuthentication.Authenticate(name,pwd))
{
FormsAuthentication.RedirectFromLoginPage(name, false);
} else
{
ClientScript.RegisterStartupScript(this.GetType(), "Login", "alert('用户名或密码不正确,请重新输入');", true);
}

Web.config页面
<authentication mode="Forms"> <forms loginUrl="Login.aspx" defaultUrl="Default.aspx"> <credentials passwordFormat="Clear">
<user name="admin" password="123 "/>
<user name="user" password="456"/>
</credentials> </forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
实现方法:



加密的方式:
Login.aspx
protected void Button1_Click(object sender, EventArgs e)
{
string name = TextBox1.Text;
string pwd = TextBox2.Text; if (name == "admin" && pwd == "123")
{ Response.Write(FormsAuthentication.HashPasswordForStoringInConfigFile("123", "MD5"));
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "Login", "alert('用户名或密码不正确,请重新输入');", true);
}

Web.config页面
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="Default.aspx"> <credentials passwordFormat="MD5">
<user name="admin" password="202CB962AC59075B964B07152D234B70 "/>
<user name="user" password="456"/>
</credentials> </forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>

实现的方法:

