|
ASP.NET2.0 窗体身份验证在 IIS 身份验证完成后发生。可以使用 forms 元素配置窗体身份验证。 窗体身份验证配置 以下配置文件片段显示窗体身份验证的默认属性值。 以下是引用片段: <system.web> <authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" /> </authentication> </system.web> |
下面是对默认属性值的描述: •loginUrl 指向应用程序的自定义登录页。应该将登录页放在需要安全套接字层 (SSL) 的文件夹中。这有助于确保凭据从浏览器传到 Web 服务器时的完整性。 •protection 设置为 All,以指定窗体身份验证票的保密性和完整性。这导致使用 machineKey 元素上指定的算法对身份验证票证进行加密,并且使用同样是 machineKey 元素上指定的哈希算法进行签名。 •timeout 用于指定窗体身份验证会话的有限生存期。默认值为 30 分钟。如果颁发持久的窗体身份验证 Cookie,timeout 属性还用于设置持久 Cookie 的生存期。 •name 和 path 设置为应用程序的配置文件中定义的值。 •requireSSL 设置为 false。该配置意味着身份验证 Cookie 可通过未经 SSL 加密的信道进行传输。如果担心会话窃取,应考虑将 requireSSL 设置为 true。 •slidingExpiration 设置为 true 以执行变化的会话生存期。这意味着只要用户在站点上处于活动状态,会话超时就会定期重置。 •defaultUrl 设置为应用程序的 Default.aspx 页。 •cookieless 设置为 UseDeviceProfile,以指定应用程序对所有支持 Cookie 的浏览器都使用 Cookie。如果不支持 Cookie 的浏览器访问该站点,窗体身份验证在 URL 上打包身份验证票。 •enableCrossAppRedirects 设置为 false,以指明窗体身份验证不支持自动处理在应用程序之间传递的查询字符串上的票证以及作为某个窗体 POST 的一部分传递的票证。 授权配置 在 IIS 中,对所有使用窗体身份验证的应用程序启用异步访问。UrlAuthorizationModule 类用于帮助确保只有经过身份验证的用户才能访问页。 可以使用 authorization 元素配置 UrlAuthorizationModule,如以下示例所示。 以下是引用片段:
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
| 使用该设置将拒绝所有未经过身份验证的用户访问应用程序中的任何页。如果未经身份验证的用户试图访问某页,窗体身份验证模块将该用户重定向到 forms 元素的 loginUrl 属性指定的登录页。 窗体身份验证控制流 图 1 显示窗体身份验证期间出现的事件顺序。 
图 1. 窗体身份验证控制流•用户请求应用程序的虚拟目录下的 Default.aspx 文件。因为 IIS 元数据库中启用了匿名访问,因此 IIS 允许该请求。ASP.NET 确认 authorization 元素包括 标记。 服务器查找一个身份验证 Cookie。如果找不到该身份验证 Cookie,则用户重定向到配置好的登录页 (Login.aspx),该页由 forms 元素的 LoginUrl 属性。用户通过该窗体提供和提交凭据。有关起始页的信息存放在使用 RETURNURL 作为密钥的查询字符串中。服务器 HTTP 应答如下所示: 302 Found Location: http://localhost/FormsAuthTest/login.aspx?RETURNURL=%2fFormAuthTest%2fDefault.aspx •浏览器请求 Login.aspx 页,并在查询字符串中包括 RETURNURL 参数。 •服务器返回登录页以及 200 OK HTTP 状态代码。 •用户在登录页输入凭据,并将该页(包括来自查询字符串的 RETURNURL 参数)发送回服务器。 •服务器根据某个存储(如 SQL Server 数据库或 Active Directory 用户存储)验证用户凭据。登录页中的代码创建一个包含为该会话设置的窗体身份验证票的 Cookie。 在 ASP.NET 2.0 中,可以通过成员身份系统执行对用户凭据的验证。Membership 类为此提供了 ValidateUser 方法,如下所示: 以下是引用片段: if (Membership.ValidateUser(userName.Text, password.Text)) { if (Request.QueryString["ReturnUrl"] != null) { FormsAuthentication.RedirectFromLoginPage(userName.Text, false); } else { FormsAuthentication.SetAuthCookie(userName.Text, false); } } else { Response.Write("Invalid UserID and Password"); } |
注 使用 Login Web 服务器控件时,它自动为您执行以下步骤。下文使用了前面提供的代码。 •对于经过身份验证的用户,服务器将浏览器重定向到查询字符串中的 RETURNURL 参数指定的原始 URL。服务器 HTTP 应答如下所示: 302 Found Location: http://localhost/TestSample/default.aspx •重定向之后,浏览器再次请求 Default.aspx 页。该请求包括身份验证 Cookie。 •FormsAuthenticationModule 类检测窗体身份验证 Cookie 并对用户进行身份验证。身份验证成功后,FormsAuthenticationModule 类使用有关经过身份验证的用户的信息填充当前的 User 属性(由 HttpContext 对象公开)。 •由于服务器已经验证了身份验证 Cookie,因此它允许访问并返回 Default.aspx 页。
|