首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET Forms 驗證詳解 (中):web.config 設定、Cookie 保護與 Ticket 結構

     編輯:關於ASP.NET

Forms 驗證核心設定集中在 web.config <forms> 元素。本文詳細說明各屬性用途、Cookie 保護機制 (驗證/加密)、FormsAuthenticationTicket 結構與序列化細節。

<forms> 元素完整屬性


<authentication mode="Forms">
  <forms name="MyAppCookie"
         loginUrl="Login.aspx"
         timeout="60"
         slidingExpiration="true"
         path="/"
         protection="All"
         requireSSL="false"
         cookieless="UseDeviceProfile"
         domain=""
         enableCrossAppRedirects="false" />
</authentication>
屬性預設值說明
name.ASPXAUTHCookie 名稱,多應用程式部署同網域時需唯一化避免衝突
loginUrllogin.aspx未驗證使用者存取受保護資源時導向頁面
timeout30 (分鐘)Ticket/逾期時間;slidingExpiration="true" 時每次請求重置
slidingExpirationtruetrue:活躍延長;false:固定期限
path/Cookie 路徑,通常保持根路徑
protectionAllAll=驗證+加密;Validation=僅驗證;Encryption=僅加密;None=無保護
requireSSLfalsetrue 時僅 HTTPS 傳送 Cookie
cookielessUseDeviceProfileUseUri/UseDeviceProfile/AutoDetect/Never:無 Cookie 時將 Ticket 嵌入 URL
domain(空)跨子網域共享 Cookie (如 .example.com)
enableCrossAppRedirectsfalse允許跨應用程式重導並保持驗證

Cookie 保護機制

  • 驗證 (Validation):HMAC-SHA1 (或 machineKey validation="MD5") 產生 MAC 附加 Ticket 尾端,防篡改。
  • 加密 (Encryption):AES (或 machineKey validation="3DES") 加密 Ticket 內容,防竊取。
  • All:先加密再驗證 (預設,最安全)。
  • machineKey 同步:Web Farm 部署時所有節點 machineKey 必須一致,否則解密/驗證失敗。

FormsAuthenticationTicket 結構


public sealed class FormsAuthenticationTicket
{
    public int Version { get; }           // 1
    public string Name { get; }           // 使用者名稱
    public DateTime IssueDate { get; }    // 簽發時間
    public DateTime Expiration { get; }   // 到期時間 (UTC)
    public bool IsPersistent { get; }     // 是否持久 Cookie
    public string UserData { get; }       // 自訂資料 (如 UserId|Roles|Permissions)
    public string CookiePath { get; }     // Cookie 路徑
    // 內部:序列化為字串 → 加密 → Base64 → Cookie 值
}

UserData 最佳實務

  • 格式:UserId|Role1,Role2|Perm1,Perm2 或 JSON。
  • 大小限制:Cookie 總計 4KB,UserData 宜精簡,大量權限改用快取/資料庫查詢。
  • 敏感資料 (密碼、Token) 絕不可放入 UserData。

無 Cookie 模式 (Cookieless)

  • Ticket 序列化後嵌入 URL 路徑:/ (F(xxxx))/SecurePage.aspx。
  • 缺點:URL 洩漏 Ticket、書籤/分享洩漏身分、SEO 不友好、無法支援絕對連結。
  • 建議:僅針對不支援 Cookie 的舊裝置啟用,現代瀏覽器皆支援 Cookie。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved