ASP.NET 2.0 中Forms安全认证


即:使用 Membership 类 + FormsAuthentication 一起使用以创建的用户管理与认证的系统 。
当然这两部分都可以单独使用,今天先着重后者,至于前者,我下一篇随笔将会写到 。

ASP.NET 中提供了多种认证方式,比如大名鼎鼎的Windows 身份验证
Windows 身份验证模式根据 IIS 所提供的凭据将当前 User 属性值设置为 WindowsIdentity,但它不修改提供给操作系统的 Windows 标识 。提供给操作系统的 Windows 标识用于进行权限检查(如 NTFS 文件权限检查)或者用于使用集成安全性连接到数据库 。默认情况下,此 Windows 标识是 ASP.NET 进程的标识 。在 Microsoft Windows 2000 和 Windows XP Professional 上,此标识是 ASP.NET 辅助进程的标识,即本地 ASPNET 帐户 。在 Windows Server 2003 上,此标识是 ASP.NET 应用程序所属的 IIS 应用程序池的标识 。默认情况下,此标识是 NETWORK SERVICE 帐户 。
通过启用模拟功能,可以将 ASP.NET 应用程序的 Windows 标识配置为 IIS 所提供的 Windows 标识 。也就是说,指示 ASP.NET 应用程序模拟 IIS 为 Windows 操作系统验证的所有任务(包括文件和网络访问)提供的标识 。(解释来自MSDN Library)

还有一种常有的认证即是 Forms 身份验证
Forms 身份验证使不要求 Windows 身份验证的 Web 应用程序可以进行用户和密码验证 。使用 Forms 身份验证时,用户信息存储在外部数据源中,例如Member 数据库,或存储在应用程序的配置文件中 。在用户通过身份验证后,Forms 身份验证即会在 Cookie 或 URL 中维护一个身份验证票证,这样已通过身份验证的用户就无需在每次请求时都提供凭据了 。

这样一来就方便也安全了,那具体怎么完成Forms身份认证的设置呢?

首先打开配置文件web.config
找到<system.web>节点下的 <authentication> 和 <authorization>节点加入
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<authentication>节点是设置认证方式,这里我们制定 Forms
<forms>节点内的属性可以制定 认证页面(登录页面)、默认页面、是否使用cookie、认证超时时间等等 。
这里我们只指定认证页面 loginUrl="login.aspx"
<authorization> 节点是认证节点
<deny> 是否认节点 指定属性 users="?"即为未经过认证的人都需要去认证页面进行认证
与之对应的是<allow>允许节点

这样一来思路就清晰了,无论用户访问什么页面服务器会判断用户是否通过认证,如果没有转到认证页面 。

下一步将要确定在login.aspx.cs文件中如何完成我们认证工作了
public void Login_OnClick(object sender, EventArgs args)
{
if (BLL.CheckLogin(this.Txbusername.Text,this.Txbuserpwd.Text ))
FormsAuthentication.RedirectFromLoginPage(UsernameTextbox.Text,NotPublicCheckBox.Checked);
else
Msg.Text = "Login failed. Please check your user name and password and try again.";
}
这里的CheckLogin(用户名,密码) 方法是在逻辑层使用的验证用户是否合法的方法
当然如果用 Membership类继承的一些验证方法会更简单,但是在此不详细说明了 。

FormsAuthentication 类(终于提到主人公了),它所属的命名空间为 System.Web.Security;
FormsAuthentication 是用来设置认证的类,如果用户合法,把用户名保存在cookie中,之后用户再次访问或访问其他页面都无需再次认证
它内部的常用方法有
RedirectFromLoginPage(用户名(string),是否把用户名长期保存在coolie中(bool))
将经过身份验证的用户重定向回最初请求的 URL 或默认 URL

SetAuthCookie(用户名(string),是否把用户名长期保存在coolie中(bool))
为提供的用户名创建一个身份验证票证,并将其添加到响应的 Cookie 集合或 URL
等等 方法很多,不详细列出了 。

具体的使用或者深入的挖掘希望各位自己去探索了