IIS 身份驗證
ASP.NET 身份驗證分為兩個步驟。首先,Internet 資訊服務 (IIS) 對使用者進行身份驗證,并建立一個 Windows 令牌來表示該使用者。IIS 通過檢視 IIS 中繼資料庫設定,确定應該對特定應用程式使用的身份驗證模式。如果 IIS 配置為使用匿名身份驗證,則為 IUSR_MACHINE 帳戶生成一個令牌并用它表示匿名使用者。然後,IIS 将該令牌傳遞給 ASP.NET。
其次,ASP.NET 執行自己的身份驗證。所使用的身份驗證方法由 authentication 元素的 mode 屬性指定。以下身份驗證配置指定 ASP.NET 使用 FormsAuthenticationModule 類:
<authentication mode="Forms" />
注 由于窗體身份驗證不依賴于 IIS 身份驗證,是以如果要在 ASP.NET 應用程式中使用窗體身份驗證,則應該在 IIS 中為應用程式配置匿名通路。
forms 驗證
ASP.NET 窗體身份驗證在 IIS 身份驗證完成後發生。可以使用 forms 元素配置窗體身份驗證。

建立身份驗證 Cookie
通過 FormsAuthentication 類建立身份驗證 Cookie,如下所示。使用者經過驗證後,FormsAuthentication 類在内部建立一個 FormsAuthenticationTicket 對象,方法是指定 Cookie 名、Cookie 版本、目錄路徑、Cookie 頒發日期;Cookie 到期日期、是否應該保留 Cookie,以及使用者定義的資料(可選)。
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
"userName",
DateTime.Now,
DateTime.Now.AddMinutes(30), // value of time out property
false, // Value of IsPersistent property
String.Empty,
FormsAuthentication.FormsCookiePath);
接下來,如果 forms 元素的 protection 屬性設定為 All 或 Encryption,則窗體身份驗證使用 Encrypt 方法對窗體身份驗證票進行加密和簽名。
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
------------------------------
使用者登入的過程大緻是這樣的:
1. 檢查使用者送出的登入名和密碼是否正确。
2. 根據登入名建立一個FormsAuthenticationTicket對象。
3. 調用FormsAuthentication.Encrypt()加密。
4. 根據加密結果建立登入Cookie,并寫入Response。
在登入驗證結束後,一般會産生重定向操作, 那麼後面的每次請求将帶上前面産生的加密Cookie,供伺服器來驗證每次請求的登入狀态。
每次請求時的(認證)處理過程如下:
1. FormsAuthenticationModule嘗試讀取登入Cookie。
2. 從Cookie中解析出FormsAuthenticationTicket對象。過期的對象将被忽略。
3. 根據FormsAuthenticationTicket對象構造FormsIdentity對象并設定HttpContext.User
4. UrlAuthorizationModule執行授權檢查。
參考
http://www.cnblogs.com/winnerzone/archive/2007/06/29/800225.html
http://www.cnblogs.com/fish-li/archive/2012/04/15/2450571.html