我正在查看ASP.NET MVC 5身份驗證的新功能,並注意到現在的一切都是ClaimsIdentity。我想知道這些值存儲在哪裏:在ASP.NET MVC中的ClaimsIdentity 5
會話,緩存或Cookie本身。
如果它存儲在cookie中,那麼在超過cookie大小限制之前可以存儲的索賠號存在明顯的限制。
我正在查看ASP.NET MVC 5身份驗證的新功能,並注意到現在的一切都是ClaimsIdentity。我想知道這些值存儲在哪裏:在ASP.NET MVC中的ClaimsIdentity 5
會話,緩存或Cookie本身。
如果它存儲在cookie中,那麼在超過cookie大小限制之前可以存儲的索賠號存在明顯的限制。
ClaimsIdentity本身沒有存儲機制。但是,如果您使用OWIN Cookie中間件,那麼它會存儲在cookie中。是的 - 有一個限制。
因此,默認情況下,MVC5模板從數據庫生成ClaimsIdentity並將其保存到一段時間內有效的cookie表單中。但用戶數據默認存儲在SQL數據庫中。
默認情況下,域數據存儲在SQL Server中,我理解該部分,但是當您創建ClaimsIdentity對象並將其提供給AuthenticationManager時,它將相同的數據存儲到cookie中。如果你的數據對於一個cookie來說太大了,那麼這個cookie永遠不會寫出來給瀏覽器,因爲它們會由於違反大小限制而被拒絕。 –
是的,Owin CookieMiddleware負責將ClaimsIdentity轉化爲cookie –
如上所述,來自各種來源的聲明可以在會話之間通過缺省使用OWIN在身份驗證過程中創建的Cookie持久保存。這通常在\ App_Start \ Startup.Auth.cs中配置。您可以設置Cookie的到期時間,是否需要滑動到期(在返回訪問時更新cookie超時),身份驗證/授權端點的位置等等。後面的部分允許您在ClaimPrincipal期間提供額外的聲明和ClaimsIdentity創建過程。有了一個體面的到期,你只需要爲用戶會話做一次。在後續訪問您的網站時,OWIN中間件將解析cookie並重新創建此步驟中的所有聲明。
您不應該擔心cookie的大小,新的OWIN認證中間件實現了cookie分塊(目前可以從預發佈源獲得 - 穩定版本不會分塊)。
我們已經在我們的企業中實現了這一點,我們有幾個聲明來源:我們的內部單點登錄服務,活動目錄和我們自己的應用程序數據庫(關於我們關心的用戶的角色和附加屬性)。
Bummer,那麼您如何處理來自Active Directory的角色,由於企業環境,角色可能是20或30?我想你必須創建一個混合的ClaimsIdentity,它以某種方式與Active Directory掛鉤? –
你不把它們存儲在cookie中? – leastprivilege
或使用Windows身份驗證 - 這種方式你得到一個WindowsIdentity。 – leastprivilege