Forms 身份验证通常指这样一个系统,在该系统中使用 HTTP 客户端重定向将未经身份验证的请求重定向到 HTML 窗体。如果应用程序需要在登录时通过 HTML 窗体收集自己的用户凭据,那么选择 Forms 身份验证就很好。用户提供凭据并提交该窗体。如果应用程序对请求进行身份验证,系统会发出一个 Cookie,在其中包含用于重新获取标识的凭据或密钥。随后发出在请求头中具有该 Cookie 的请求。ASP.NET 事件处理程序使用应用程序指定的任何验证方法对这些请求进行身份验证和授权。
<forms name
="name" loginUrl="url"protection="All|None|Encryption|Validation"
timeout="30" path="/" requireSSL="true|false" slidingExpiration="true|false"> <credentials passwordFormat="format"/> </forms>
可选属性
属性 | 选项 | 说明 |
---|---|---|
name | 指定要用于身份验证的 HTTP Cookie。默认情况下,name 的值是 .ASPXAUTH。如果在单个服务器上正运行多个应用程序并且每一应用程序均要求唯一的 Cookie,则您必须在每一应用程序的 Web.config 文件中配置 Cookie 名称。 | |
loginUrl | 指定如果没有找到任何有效的身份验证 Cookie,为登录将请求重定向到的 URL。默认值为 default.aspx。 | |
protection | 指定 Cookie 使用的加密类型(如果有)。 | |
All | 指定应用程序同时使用数据验证和加密来保护 Cookie。该选项使用已配置的数据验证算法(基于 <machineKey> 元素)。如果三重 DES (3DES) 可用并且密钥足够长(48 位或更多),则使用三重 DES 进行加密。All 是默认(和建议)值。 | |
None | 指定对于将 Cookie 仅用于个性化并且具有较低的安全要求的站点而言,同时禁用加密和验证。不推荐以此方式使用 Cookie;但是,这是使用 .NET Framework 启用个性化的占用资源最少的方式。 | |
Encryption | 指定使用三重 DES 或 DES 对 Cookie 进行加密,但不对该 Cookie 执行数据验证。以此方式使用的 Cookie 可能会受到精选的纯文本的攻击。 | |
Validation | 指定验证方案验证已加密的 Cookie 的内容在转换中是否未被改变。Cookie 是使用 Cookie 验证创建的,方式是:将验证密钥和 Cookie 数据相连接,然后计算消息身份验证代码 (MAC),最后将 MAC 追加到输出 Cookie。 | |
timeout | 指定以整数分钟为单位的时间量,超过此时间量,Cookie 将过期。默认值是 30。如果 SlidingExpiration 属性为 true,则 timeout 属性是一个弹性值,以收到最后一个请求后指定的分钟数为到期时间。为避免危及性能,以及为避免向启用 Cookie 警告的用户显示多个浏览器警告,在经过了超过一半的指定时间后更新该 Cookie。这可能导致精确性上的损失。持久性 Cookie 不超时。 | |
path | 为由应用程序发出的 Cookie 指定路径。默认值是正斜杠 (/),这是因为大多数浏览器是区分大小写的,并且如果路径大小写不匹配,将不发送回 Cookie。 | |
requireSSL | 指定是否需要安全连接来转换身份验证 Cookie。 | |
true | 指定必须使用安全连接来保护用户凭据。如果是 true, ASP.NET 为身份验证 Cookie 设置 HttpCookie.Secure ,兼容的浏览器不返回 Cookie,并且除非连接使用的是安全套接字层 (SSL)。 | |
false | 指定在传输 Cookie 时,安全连接不是必需的。默认值为 false。 | |
slidingExpiration | 指定是否启用弹性过期时间。在单个会话期间,弹性过期时间针对每个请求重置当前身份验证 Cookie 的过期时间。 | |
true | 指定启用弹性过期时间。在单个会话期间,身份验证 Cookie 被刷新,并且每个后续请求的到期时间被重置。ASP.NET 版本 1.0 的默认值为 true。 | |
false | 指定不启用弹性过期时间,并指定 Cookie 在最初发出之后,经过一段设定的时间间隔后失效。默认值为 false。 |
通过在应用程序的Web.config文件中加入一个 入口,可以进行基于窗体的身份鉴别。如下所示:
<system.web>
<authentication mode="Forms">
<forms name="Auth" loginUrl="login.aspx" protection="All" path="/"></forms>
</authentication>
</system.web>
设置窗体的验证
<location path="需要验证的页面.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
问号 (?) 表示拒绝匿名用户访问;星号 (*) 表示拒绝所有用户访问。
在代码中添加已验证的用户
FormsAuthentication.RedirectFromLoginPage(txtUserNm.Text.Trim(),true);
移除身份验证票
FormsAuthentication.SignOut();