基于窗体的身份验证
基于窗體的身份驗證是一項 ASP.NET 身份驗證服務,它使應用程序能夠提供自己的登錄用戶界面并進行自己的憑據驗證。ASP.NET 對用戶進行身份驗證,將未經身份驗證的用戶重定向到登錄頁,并執行所有必要的 Cookie 管理。這種身份驗證是許多網站使用的流行方法。
應用程序必須配置為使用基于窗體的身份驗證,方法是將 <authentication> 設置為 Forms,并拒絕匿名用戶訪問。下面的示例演示如何在所需應用程序的 Web.config 文件中完成此操作:
<configuration><system.web><authentication mode="Forms"/><authorization><deny users="?" /></authorization></system.web>
</configuration>
管理員使用基于窗體的身份驗證來配置要使用的 Cookie 的名稱、保護類型、用于登錄頁的 URL、Cookie 有效的時間長度,以及用于已發出的 Cookie 的路徑。下表顯示 <Forms> 元素的有效屬性,該元素是下面的示例中顯示的 <authentication> 元素的子元素: <authentication mode="Forms"><forms name=".ASPXCOOKIEDEMO" loginUrl="login.aspx" defaultUrl="default.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false"cookieless="UseDeviceProfile" domain=""><!-- protection="[All|None|Encryption|Validation]" --><!-- cookieless="[UseUri | UseCookies | AutoDetect | UseDeviceProfile]" --></forms>
</authentication>
屬性
說明
cookieless
ASP.NET 2.0 Forms 身份驗證可以將 Forms 身份驗證票存儲在 Cookie 中也可以以無 Cookie 的表示形式存儲在 URL 上。UseDeviceProfile 的默認值表示 ASP.NET 根據預先計算得到的瀏覽器配置文件來確定存儲票證的位置。AutoDetect 選項使 ASP.NET 動態確定瀏覽器是否支持 Cookie。UseUri 和 UseCookies 分別強制實施無 Cookie 票證和有 Cookie 票證。
defaultUrl
指定在成功登錄后,請求將重定向到的默認 URL。在登錄后進行重定向時,如果重定向 URL 對于 Forms 身份驗證不可用,則使用此值。
domain
指定包含 Forms 身份驗證票的 HttpCookie 的 Domain 屬性的值。顯式設置此屬性可使應用程序共享同一個 Cookie,前提是這些應用程序共享某個 DNS 命名空間的一個公共部分(例如,如果 domain 屬性設置為“contoso.com”,則 appA.contoso.com 和 appB.contoso.com 可以共享一個 Cookie)。
enableCrossAppRedirects
在 ASP.NET 2.0 中,Forms 身份驗證允許以查詢字符串變量或窗體 POST 變量的形式在應用程序之間傳遞 Forms 身份驗證票。將此屬性設置為 true 可使 FormsAuthenticationModule 能夠從查詢字符串或窗體 POST 變量提取票證。
loginUrl
指定未經身份驗證的用戶的請求將被重定向到的 URL。該 URL 可以在同一臺計算機上或在遠程計算機上。如果是在遠程計算機上,則兩臺計算機上 machineKey 配置元素中的 decryptionkey 和 validationKey 屬性都需要使用相同的值。
name
用于身份驗證的 HTTP Cookie 的名稱。注意,如果多個應用程序需要在一臺計算機上使用基于窗體的身份驗證服務,并且每個應用程序都希望由應用程序隔離 Forms 身份驗證 Cookie,則每個應用程序都應配置一個唯一的 Cookie 值。為避免在 URL 中產生依賴項,在設置身份驗證 Cookie 時,ASP.NET 還使用“/”作為 Path 值,以便將這些 Cookie 發送回站點上的每個應用程序。
path
用于發出的 Cookie 的路徑。默認值為“/”,以避免路徑中大小寫不匹配的造成的困難,因為在返回 Cookie 時,瀏覽器是嚴格區分大小寫的。共享服務器環境中的應用程序應使用此指令來維護專用 Cookie。(它們還可以使用 API 在運行時指定路徑來發出 Cookie。)
protection
用于保護 Cookie 數據的方法。有效值如下:
- All:同時使用數據驗證和加密來保護 Cookie。所配置的數據驗證算法是基于 <machinekey> 元素的。如果密鑰足夠長(48 個字符),默認情況下將使用 AES 進行加密。All 是默認(和建議)值。
- None:用于僅將 Cookie 用于個性化設置并且安全性要求不高的站點。加密和驗證都可以被禁用。盡管以此方式使用 Cookie 需謹慎,但對于使用 .NET Framework 實現個性化設置的任何方法,此設置提供了最佳性能。
- Encryption:使用 AES、TripleDES 或 DES 加密 Cookie,但不對 Cookie 進行數據驗證。這類 Cookie 容易受到精心選擇的純文本的攻擊。
- Validation:不加密 Cookie 的內容,但驗證 Cookie 數據在傳輸過程中是否未被更改。若要創建 Cookie,驗證密鑰在緩沖區中與 Cookie 數據連接,并且計算出 MAC 并將其追加到輸出的 Cookie。
requireSSL
如果設置為 true,則 Forms 身份驗證會設置 Forms 身份驗證 Cookie 的安全位。兼容的瀏覽器只將 Cookie 通過 SSL 連接發送回 ASP.NET。注意,如果使用無 Cookie Forms 身份驗證,則此設置無效。
slidingExpiration
如果設置為 true,則 Forms 身份驗證將定期更新 Forms 身份驗證票的生存期。無論票證是包含在 Cookie 中,還是以無 Cookie 的格式包含在 URL 中,都會進行此操作。
timeout
時間量(以整數分鐘為單位),經過該時間量之后,Cookie 則會過期。默認值是 30。超時屬性是一個可調值,從收到上次請求的時間開始計算,它將在 n 分鐘后過期。為了避免對性能產生負面影響,也為了避免那些打開了 Cookie 警告的應用程序產生多個瀏覽器警告,Cookie 在超時時間過半時更新。(這意味著在某些情況下可能會出現精度損失。)
配置了應用程序后,需要提供一個登錄頁。下面的示例演示一個簡單的登錄頁。該示例在運行時需要 Default.aspx 頁。未經身份驗證的請求被重定向到登錄頁 (Login.aspx),該頁顯示一個簡單窗體,提示用戶輸入電子郵件地址和密碼。(使用 Username="someone@www.contoso.com" 和 Password="password" 作為憑據。)
驗證了憑據后,應用程序調用以下內容:
C#
VB
這將用戶重定向回最初請求的 URL。不想執行重定向的應用程序既可以調用 FormsAuthentication.GetAuthCookie 來檢索 Cookie 值,也可以調用 FormsAuthentication.SetAuthCookie 將正確加密的 Cookie 附加到輸出的響應中。對于提供嵌入在包含頁中的登錄用戶界面的應用程序,或者想要更多地控制用戶被重定向到的位置的應用程序而言,這些方法很有用。
身份驗證 Cookie 既可以是臨時的,也可以是永久(“持久”)的。臨時 Cookie 只在當前瀏覽器會話期間保持。當瀏覽器關閉時,Cookie 即會丟失。永久 Cookie 由瀏覽器保存,并在瀏覽器各會話期間發回,除非用戶顯式刪除 Cookie 或 Cookie 的生存期結束。臨時 Cookie 和永久 Cookie 的 Cookie 生存期由 timeout 配置屬性確定。這一點在行為上與 ASP.NET 的早期版本相比稍有更改,在早期版本中永久 Cookie 的生存期為 50 年。在 ASP.NET 2.0 中,臨時 Cookie 和永久 Cookie 的過期日期設置為當前時間加上 timeout 配置屬性的值。
C# Forms-Based/Cookie Authentication
Forms 身份驗證所使用的身份驗證 Cookie 由 System.Web.Security.FormsAuthenticationTicket 類的序列化版本組成。信息包括用戶名(但沒有密碼)、使用的 Forms 身份驗證版本、發出 Cookie 的日期以及可選的應用程序特定數據的字段。
通過使用 FormsAuthentication.SignOut 方法,應用程序代碼可以撤消或移除身份驗證 Cookie。這將移除身份驗證 Cookie,不論它是臨時的還是永久的。
還可以使用配置為基于窗體的身份驗證服務提供有效憑據的列表,如下例所示:
Hash 類型
說明
Clear
密碼以明文形式存儲
SHA1
密碼存儲為 SHA1 摘要
MD5
密碼存儲為 MD5 摘要
轉載于:https://www.cnblogs.com/firstyi/archive/2006/11/13/558916.html
總結
- 上一篇: XP 风格的可拖动列、可排序、可改变宽度
- 下一篇: [BTS06]BizTalk2006 S