Asp.net-Identity

ASP.NET 身份:為什麼是使用者屬性和聲明?

  • February 27, 2016

我現在真的迷失在試圖理解 ASP.NET Identity 2.1.0 的過程中,需要回到基礎知識,以便更好地理解 cookie 和聲明的工作原理。

一個基本的查詢是圍繞我不確定我是否理解為什麼使用者需要屬性以及聲明:不是聲明只是鍵+值+權限,因此可以用於儲存屬性(鍵+值) ? * 保留兩組屬性(除了 Typed get/sets on the Properties)有什麼好處?一個比另一個更短暫?* 是否只是為了區分 Cookie 中的序列化和往返(只有聲明,對嗎?)?* 說到這個……只是檢查一下:是所有聲明都通過在 cookie 中序列化而往返,還是只是它們的一個子集(例如 ClaimTypes.Roles)?

謝謝您的幫助!

對使用者的所有聲明都被序列化為 cookie。並非所有ApplicationUser屬性都被序列化為聲明。事實上,大多數屬性都沒有序列化為聲明(除非特別編碼)。

您混淆了 2 個概念:聲明是ClaimsPrincipal : IPrincipal每個 HTTP 請求都可用的聲明的一部分(如果使用者經過身份驗證)。ClaimsPrincipalApplicationUser使用者登錄并序列化到 cookie 時創建。

ApplicationUser模型是將使用者資訊保存到數據庫中的一種方式,其他屬性只是數據庫中使用者表的附加欄位。您可以編寫程式碼,通過添加聲明使這些屬性在您的 cookie 中可用,但它們不會自動成為您的聲明。

添加額外資訊可以通過添加聲明或通過ApplicationUser表中的附加屬性來實現。您可以控制如何添加數據。但請記住,這些可以用於不同的目的。如果你在 上添加一個屬性ApplicationUser,你就是說所有使用者都應該有一些東西。如果您添加具有相同數據的聲明,則表示該使用者擁有一些其他使用者可能沒有的數據。

回答您的最後一個問題:所有聲明都在 cookie 中進行序列化和往返。所以不要在 cookie 中放入太多資訊 - 這些資訊會加起來,您將往返傳輸太多數據。

引用自:https://stackoverflow.com/questions/26356613