⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formsauth.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>基于窗体的身份验证</h4>

<p>基于窗体的身份验证是 ASP.NET 身份验证服务,它使应用程序能够提供它们自己的登录 UI 和进行它们自己的凭据验证。ASP.NET 验证用户的身份,将未授权的用户重定向到登录页并执行所有必要的 Cookie 管理。这种身份验证是许多 Web 站点使用的流行方法。</p>

<p>应用程序必须被配置成使用基于窗体的身份验证,将 <b>&lt;authentication&gt;</b> 设置为 <b>Forms</b> 并且拒绝匿名用户访问。下面的示例说明如何在所需应用程序的 Web.config 文件中完成此配置:</p>

<div class="code"><xmp>
<configuration>
  <system.web>
    <authentication mode="Forms"/>
    <authorization>
        <deny users="?" />
    </authorization>
  </system.web>
</configuration>
</xmp></div>

<p>管理员使用基于窗体的身份验证来配置要使用的 Cookie 名称、保护类型、用于登录页的 URL、Cookie 生效的时间长度以及用于已发布 Cookie 的路径。下表显示了 <b>&lt;Forms&gt;</b> 元素(它是下面的示例中显示的 <b>&lt;authentication&gt;</b> 元素的子元素)的有效属性:</p>

<div class="code"><xmp>
<authentication mode="Forms">
   <forms name=".ASPXCOOKIEDEMO" loginUrl="login.aspx" protection="all" timeout="30" path="/">
                    <!-- protection="[All|None|Encryption|Validation]" -->
   </forms>
</authentication>
</xmp></div>

<table class="table2" cellpadding=3 width="95%">
<tr>
<th width="150"><b>属性</b></th>
<th><b>说明</b></th>
</tr>
<tr>
<td><b>loginUrl</b></td>
<td>未授权的用户被重定向到的登录 URL。它可以在同一台计算机上或在远程计算机上。如果它在远程计算机上,两台计算机需要对 <b>decryptionkey</b> 属性使用相同的值。</td>
</tr>
<tr>
<td><b>name</b></td>
<td>用于身份验证目的的 HTTP Cookie 的名称。注意:如果不止一个应用程序要在一台计算机上使用基于窗体的身份验证服务,则每个应用程序应该配置唯一的 Cookie 值。为了避免在 URL 中导致依赖项,ASP.NET 在设置身份验证 Cookie 时将“/”用作 Path 值,这使 Cookie 被发送回站点上的每个应用程序。</td>
</tr>
<tr>
<td><b>timeout</b></td>
<td>以整数分钟为单位的时间量,超过此时间量,Cookie 将过期。默认值是 <i>30</i>。超时属性是一个变化值,从收到最后一个请求的时间开始计算,它过期 <i>n</i> 分钟。为了避免对性能产生负面影响,也为了避免那些打开了 Cookie 警告的应用程序产生多个浏览器警告,Cookie 在超时时间过半时更新。(这意味着在某些情况下会丢失可能的精度。)</td>
</tr>
<tr>
<td><b>path</b></td>
<td>用于已发出 Cookie 的路径。默认值为“/”以避免因路径中有不匹配的大小而带来的困难,因为在返回 Cookie 时,浏览器严格区分大小写。共享服务器环境中的应用程序应该使用此指令维持专用 Cookie。(另一种方法是,它们可以使用 API 在运行时指定路径以发出 Cookie。)</td>
</tr>
<tr>
<td><b>protection</b></td>
<td>用于保护 Cookie 数据的方法。有效值如下所示:
    <ul>
<li><b>All</b>:同时使用数据验证和加密来保护 Cookie。配置的数据验证算法基于 <b><machinekey></b> 元素。如果三重 DES 可用并且密钥足够长(48 位),则使用三重 DES 进行加密。<b>All</b> 是默认(和建议)值。
<li><b>None</b>:用于仅将 Cookie 用于个性化并且安全要求不高的站点。加密和验证都可以被禁用。尽管以此方式使用 Cookie 需谨慎,但对于使用 .NET 框架实现个性化的任何方法,此设置提供了最佳性能。
<li><b>Encryption</b>:使用 TripleDES 或 DES 加密 Cookie,但不对 Cookie 进行数据验证。这类 Cookie 容易受到精心选择的纯文本的攻击。
<li><b>Validation</b>:不加密 Cookie 的内容,但验证 Cookie 数据在传输过程中是否未被更改。若要创建 Cookie,验证密钥在缓冲区中与 Cookie 数据连接,并且计算出 MAC 并将其追加到输出的 Cookie。
    </ul>
  </td>
</tr>
</table>

<p>配置了应用程序后,需要提供一个登录页。下面的示例显示了一个简单的登录页。示例在运行时要求 Default.aspx 页。未授权的请求被重定向到登录页 (Login.aspx),此页显示一个简单的窗体,提示用户输入电子邮件地址和密码。(使用 Username=&quot;jdoe@somewhere.com&quot; 和 Password=&quot;password&quot; 作为凭据。)</p>

<p>验证了凭据后,应用程序调用下列内容:</p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);
</Tab>
<Tab Name="VB">
FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked)
</Tab>

<Tab Name="JScript">
FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);
</Tab>

</Acme:TabControl><p>

<p>这将用户重定向回当初请求的 URL。不想执行重定向的应用程序可以或者调用 <b>FormsAuthentication.GetAuthCookie</b> 来检索 Cookie 值,或者调用 <b>FormsAuthentication.SetAuthCookie</b> 将正确加密的 Cookie 附加到输出的响应中。对于提供嵌入在包含页中的登录 UI 的应用程序,或者想要更多地控制用户被重定向到的位置的应用程序而言,这些方法很有用。身份验证 Cookie 既可以临时又可以永久(“持久”)。临时 Cookie 只在当前浏览器会话期间保持。当浏览器关闭时,临时 Cookie 随即丢失。永久 Cookie 则被浏览器保存,并在浏览器会话间回发,直到被用户显式删除。</p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/security/CookieAuth/CS/default.aspx"
  ViewSource="/quickstart/aspplus/samples/security/CookieAuth/cookieauth.src"
  Icon="/quickstart/aspplus/images/formsauth.gif"
  Caption="C# 基于窗体的/Cookie 身份验证"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/security/CookieAuth/VB/default.aspx"
  ViewSource="/quickstart/aspplus/samples/security/CookieAuth/cookieauth.src"
  Icon="/quickstart/aspplus/images/formsauth.gif"
  Caption="VB 基于窗体的/Cookie 身份验证"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/security/CookieAuth/JS/default.aspx"
  ViewSource="/quickstart/aspplus/samples/security/CookieAuth/cookieauth.src"
  Icon="/quickstart/aspplus/images/formsauth.gif"
  Caption="JScript 基于窗体的/Cookie 身份验证"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>窗体身份验证使用的身份验证 Cookie 由 <b>System.Web.Security.FormsAuthenticationTicket</b> 类的线性版本组成。信息包括用户名(但没有密码)、使用的窗体身份验证版本、发出 Cookie 的日期以及可选的应用程序特定数据的字段。</p>

<p>通过使用 <b>FormsAuthentication.SignOut</b> 方法,应用程序代码可以撤消或移除身份验证 Cookie。这将移除身份验证 Cookie,不论它是临时的还是永久的。</p>

<p>还可以使用配置为基于窗体的身份验证服务提供有效凭据的列表,如下例所示:</p>

<div class="code"><xmp>
<authentication>
    <credentials passwordFormat="SHA1" >
        <user name="Mary" password="GASDFSA9823598ASDBAD"/>
        <user name="John" password="ZASDFADSFASD23483142"/>
    </credentials>
</authentication>
</xmp></div>

<p>应用程序然后可以调用 <b>FormsAuthentication.Authenticate</b> 并提供用户名和密码,ASP.NET 将验证凭据。根据 <b>passwordFormat</b> 属性的下列值,凭据可以存储在明文中,或者存储为 SHA1 或 MD5:</p>

<table class="table2" cellpadding=3>
  <tr>
<th width="150">哈希类型</th>
<th>说明</th>
  </tr>
  <tr>
<td>Clear</td>
<td>密码存储在明文中</td>
  </tr>
  <tr>
<td>SHA1</td>
<td>密码存储为 SHA1 摘要</td>
  </tr>
  <tr>
<td>MD5</td>
<td>密码存储为 MD5 摘要</td>
  </tr>
</table>

<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -