![](/img/trans.png)
[英]Relationship between Identity tables and Other tables in ASP.NET MVC 5
[英]ASP.NET MVC: Relationship between MembershipUser, Identity, MembershipProvider and Principal
我需要ASP.NET MVC應用程序中的一些功能,在做了一些研究后,我覺得我必須實現自定義MembershipUser,MembershipProvider,Identity和Principal。 我的問題是:我不理解MembershipUser和Identity之間的關系(如果有的話)以及MembershipProvider和Principal究竟在哪里。 請有人請說清楚。 我在網上發表了幾篇關於所有四個參與者的文章和教程,但沒有一個完全解決它們之間的關系。
另外:除了在Global.asax中的AuthenticateRequest期間,是否有一種優雅的方式將自定義主體分配給Context.User? 我已經看到很多關於如何在ASP.NET WebForms應用程序中執行此操作的示例,我想知道ASP.NET MVC是否有更好的方法。
IPrincipal
是為每個Web請求創建的安全上下文,包含與用戶身份及其擁有的角色相關的信息。
一個IPrincipal
包含IIdentity
,有一個Name
,一個IsAuthenticated
和AuthenticationType
屬性。
自定義MembershipProvider
是一個派生自抽象類MembershipProvider
的類,用於提供有關使用您的應用程序的用戶的自定義數據。 提供程序將在MembershipUser
類型上運行,可用於為特定用戶或用戶獲取數據,創建新用戶等。您可以從MembershipUser
繼承以創建自己的用戶類型,並且通常也可以在使用自己的用戶類型時執行此操作供應商。
當您訪問應用程序時,會創建IPrincipal
和IIdentity
並將其分配給HttpContext.Current.User
和Thread.CurrentPrincipal
,以便為請求生命周期內可能采取的任何操作提供安全信息。
如果您正在使用RoleProvider
,則會創建一個RolePrincipal
類型實例,該實例會掛鈎到已配置的RoleProvider
以獲取用戶的角色; 如果您沒有使用RoleProvider
則會創建GenericPrincipal
類型實例。
如果您正在使用表單身份驗證並且用戶已登錄,則會創建FormsIdentity
類型實例; 如果未對用戶進行身份驗證,則會創建GenericIdentity
類型實例。 創建的IIdentity
最終將序列化為傳遞回瀏覽器的身份驗證cookie,以及在下一個請求中用於構造FormsAuthenticationTicket
和IIdentity
內容。
MembershipProvider
通過提供有關用戶的其他信息來適應這一點。 靜態Membership
類的GetUser()
方法將使用當前的IIdentity.Name
和已配置的MembershipProvider
來返回包含有關用戶數據的MembershipUser
實例(如果已定義,則返回派生類)。
由於ASP.NET MVC構建在ASP.NET處理管道之上,因此您希望設置自己的IIdentity
和IPrincipal
是相同的。 據我所知,MVC架構中沒有更好的地方可以設置它們。
注意:這都來自內存。 如果我有問題,請告訴我,我會更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.