2009-09-28 110 views
2

我想重新創建我的cookie通常由FormsAuthentication.SetAuthCookie()生成的內容以及webconfig中的內容。我在做什麼我的FormsAuthenticationTicket錯誤?

<authentication mode="Forms"> 
      <forms loginUrl="~/Account/LogOn" protection="All" timeout="20160" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="false" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/> 
     </authentication> 

不過,我想沿着這樣,據我瞭解我必須使自己的FormsAuthenticationTicket添加此數據(或在SetAuthCookie將用戶名合併這一切,做分裂)發送一個更多的數據塊。

所以我試圖把它作爲安全(或者更安全),就像它從webconfig生成的一樣,具有與從webconfig生成的值相同的值。

因此,這是我迄今爲止

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "chobo2", DateTime.Now, DateTime.Now.AddYears(10), true, "test"); 
      string encTicket = FormsAuthentication.Encrypt(ticket); 
      Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

但是我現在還不能確定它是什麼用。它使用webconfig中的東西嗎?由於它不要求cookieName或超時。

當我通過web開發人員查看此cookie時,它說它不安全,並且在會話結束時過期。

當我看着從webconfig生成的一個到期日像10月12日,仍然說不安全(猜測它是指SSL)。

此外,我仍然對userData感到困惑。我如何添加我稍後獲取此值?如何添加更多數據然後再添加一次數據?

我是否總是必須解密(即調用解密方法)來解密cookie或自動執行該操作。

cookie默認使用哪種加密方式?

謝謝

回答

3

您需要手動設置窗體身份驗證票證上的所有屬性。您可以通過FormsAuthentication類的靜態訪問器訪問大部分值。只有在使用FormsAuthentication.GetAuthCookie或FormsAuthentication.SetAuthCookie時,纔會使用web.config中的配置設置。

用戶數據可以通過提取和解密表單身份驗證票據,然後使用解密票證上的UserData屬性訪問器來檢索。

您將始終需要解密憑單才能訪問用戶數據。

http://msdn.microsoft.com/en-us/library/ms998310.aspx包含有關使用的加密和驗證密碼的詳細信息,但默認情況下使用AES加密票證並使用SHA1(HMACSHA1)進行驗證。

http://support.microsoft.com/kb/910443包含更多信息和鏈接,可能會回答您的任何進一步問題。

+0

嗯好吧,那麼在新的FormsAuthenticationTicket()票證中做什麼呢?就像我設置過期時間一樣,它什麼都不做。那麼這是什麼東西? – chobo2 2009-09-29 05:17:34

+1

我認爲你把cookie和票證混淆了。票證是管理客戶端和服務器之間已驗證會話狀態的事情,Cookie僅僅是將狀態存儲在客戶端上的方式。 Cookie到期時間將決定客戶端上cookie何時到期。票據到期時間將決定服務器*上的票據何時到期*。 在服務器上詢問票據設置以確定經過身份驗證的會話的有效性,並將適當的主體/身份附加到當前正在執行的請求。 – Neal 2009-09-29 20:45:25

+0

那麼如果我希望用戶保持認證2周的話會發生什麼?我該怎麼設置? – chobo2 2009-09-29 22:22:56