2012-01-17 32 views
2

我讀在ASP.NET窗體身份驗證和無法理解有些時候認識餅乾:如何ASP.NET窗體身份驗證的工作:從要求

詹姆斯輸入用戶名,密碼,它們被保存在數據庫中。來自用戶名的cookie被創建,加密並附加到響應中。據我瞭解,當我們收到請求時,我們需要認識到接收到的cookie來自James,所以我們可以顯示他的自定義頁面。

我想了解的是系統如何檢索用戶名錶單cookie,然後從db加載他的信息?

+1

使用字符串解析和SQL(加上一些加密) – SLaks 2012-01-17 16:26:13

+0

嗯,我看不出在手冊和Apress出版ASP.NET書中提到的任何數據庫。這一切看起來像是一種魔法。我很樂意更多地瞭解它的工作原理。 – 2012-01-17 16:30:16

+1

你剛纔說「他們被保存在數據庫中」。它通常使用SQL Server或Access;它在Web.config中配置 – SLaks 2012-01-17 16:31:31

回答

6

表單驗證與存儲無關。它不必使用數據庫,實際上您可以在web.config中使用它與用戶名和密碼。

所以會發生什麼是

  1. 用戶登錄英寸
  2. 的用戶對成員資格提供認證(可以使用SQL,活動目錄,web.config文件中,Oracle,MySQL的,等等)
  3. 表單身份驗證令牌是爲用戶創建的,並通過cookie放置在用戶計算機上。
  4. 每個後續請求都會讀取表單身份驗證令牌,並向提供程序查詢以獲取用戶詳細信息。
  5. 用戶細節用於填充,然後將其提供給您的代碼以使用請求的HttpContext用戶身份和當前線程。

在你的代碼可以檢查Page類(Web窗體),或在控制類(MVC)的User屬性User財產。

儘管您可以通過當前線程或當前上下文來獲取它,但不建議使用它,特別是一旦開始使用後臺任務,其身份可能不會傳播到線程,或上下文可能會更改。

你會注意到,沒有什麼是存儲在數據庫中時,用戶登錄這一切都在窗體身份驗證令牌和檢索從中的商店對每個請求的用戶的工作是爲你做。

+0

謝謝,我看到我們可以使用會員提供商去MSSQL或使用裸露的表單身份驗證,並完成我們自己的所有工作。 – 2012-01-17 17:08:15

+0

那麼,如果你想要做你自己的工作(爲什麼?),那麼正確的方式去它會創建自己的成員資格提供這樣的標準ASP.NET件可以使用自定義代碼。 – blowdart 2012-01-17 17:21:10

+0

感謝您提及用於檢索用戶名的屬性! – 2012-01-17 19:54:48

1

Afaik Forms身份驗證不會在任何數據庫中存儲或加載任何內容。您可以使用數據庫來存儲用戶名和密碼,也可以將它們放入web.config中。如何存儲用戶憑證並驗證它們取決於您,並且可以與Forms Authentication分開進行。

驗證用戶(針對數據庫或其他邏輯存儲)後,您使用FormsAuthentication寫入身份驗證Cookie。你不需要擔心解密cookie。

您可以從System.Threading.Thread.CurrentPrincipal.Identity.Name獲取用戶名。要從數據庫檢索用戶的信息,您將使用主體標識名稱的值來查詢數據庫。

迴應評論

右鍵,您可以使用窗體身份驗證與成員資格提供,活動目錄,或自定義的用戶數據庫。 FormsAuth完全不關心密碼,除非存儲在web.config中(正如blowdart更完整的答案中所述)。它只是寫入cookie,解密後用於自動創建線程標識。

附加信息

即使這個被標記爲答案,blowdart's response更加完整。如果你需要在ASPX頁面或MVC控制器中使用它,那麼你真的不應該從線程中獲得身份。

+0

謝謝。據我瞭解,使用表單身份驗證,我們可以發送加密的cookie。然後,當一個請求到來時,系統檢查它的cookie信息將其解密回FormsAuthenticationTicket並設置Identity.Name。那麼這完全取決於我們如何處理它。對? – 2012-01-17 16:53:29

+0

@arctic_dev - 沒錯。 – 2012-01-17 16:59:31

+0

@arctic_dev - 正確。爲了處理認證,授權和存儲用戶的相關信息,您可以使用ASP.NET的[成員,角色和配置文件(http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx)供應商。或者當然你可以推出自己的產品 – PHeiberg 2012-01-17 17:00:08

0

您通過調用User.Identity.Name(例如,)獲取Web表單中的用戶名。像這樣:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string userName = User.Identity.Name; 
} 

ASP.NET爲您解釋cookie,您不必自己閱讀它。或者是你的問題如何將用戶和密碼存儲在數據庫中?

相關問題