爲了擴大Darin的答案,Web Forms Cookie auth是無狀態的。你的客戶是正確的,說明框架在封面上做了很多「魔術」。儘管如此,這並不是說客戶不能做些什麼。
默認情況下,Forms Auth cookie是無狀態的。它包含某種標識符(用戶名,用戶ID,由開發者決定),就是這樣。您可以在Cookie上設置許多屬性(是否爲會話Cookie,有多長時間等),但不影響Cookie的內容處理方式。然後cookie的內容被機器密鑰加密和MAC,所以它們不能被篡改,但這並不妨礙它們的便攜性或可重放性。
客戶端可以繼續使用表單身份驗證,如果他們想要的話,他們只需要退一步從所有的魔法。
我認爲他們正在做的事情就像FormsAuthentication.SetAuthCookie
。相反,他們可以創建一個允許包含用戶提供的數據的FormsAuthenticationTicket
。這些數據可能與會話有關(不一定是HTTP會話)。然後使用FormsAuthentication.Encrypt
加密票證,並返回一個可以在成功的身份驗證響應中設置的cookie。
當一個頁面加載(或更好的在Global.asax的Application_AuthorizeRequest
)時,他們可以從請求中獲取cookie,調用FormsAuthentication.Decrypt
來解密認證cookie,並檢查用戶數據是否與會話匹配。
當用戶顯式註銷時,清除該用戶的會話,以便它不再與cookie匹配。然後檢查用戶數據應拒絕cookie並強制他們獲取新的cookie。
這個答案有點危險;對於非專家來說,安全性並不是很好的做法。但是,忽略此問題意味着密碼更改不**會使'.ASPXAUTH' Cookie無效(儘管Cookie具有加密的到期時間,因此最終會過期)。重申:遭受入侵的用戶無法通過密碼更改/重置來使其cookie無效。就個人而言,我會建議考慮vcsjones建議的方法。 'FormsAuthenticationTicket'有一個'userData'參數,可以很好地用於這個目的。 – Brian
另請參見[SetAuthCookie]的參考源(https://referencesource.microsoft.com/#System.Web/Security/FormsAuthentication.cs,075bdc7d5fc28fdb)。 – Brian