簡體   English   中英

ASP.NET MVC:MembershipUser,Identity,MembershipProvider和Principal之間的關系

[英]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 ,一個IsAuthenticatedAuthenticationType屬性。

自定義MembershipProvider是一個派生自抽象類MembershipProvider的類,用於提供有關使用您的應用程序的用戶的自定義數據。 提供程序將在MembershipUser類型上運行,可用於為特定用戶或用戶獲取數據,創建新用戶等。您可以從MembershipUser繼承以創建自己的用戶類型,並且通常也可以在使用自己的用戶類型時執行此操作供應商。

當您訪問應用程序時,會創建IPrincipalIIdentity並將其分配給HttpContext.Current.UserThread.CurrentPrincipal ,以便為請求生命周期內可能采取的任何操作提供安全信息。

如果您正在使用RoleProvider ,則會創建一個RolePrincipal類型實例,該實例會掛鈎到已配置的RoleProvider以獲取用戶的角色; 如果您沒有使用RoleProvider則會創建GenericPrincipal類型實例。

如果您正在使用表單身份驗證並且用戶已登錄,則會創建FormsIdentity類型實例; 如果未對用戶進行身份驗證,則會創建GenericIdentity類型實例。 創建的IIdentity最終將序列化為傳遞回瀏覽器的身份驗證cookie,以及在下一個請求中用於構造FormsAuthenticationTicketIIdentity內容。

MembershipProvider通過提供有關用戶的其他信息來適應這一點。 靜態Membership類的GetUser()方法將使用當前的IIdentity.Name和已配置的MembershipProvider來返回包含有關用戶數據的MembershipUser實例(如果已定義,則返回派生類)。

由於ASP.NET MVC構建在ASP.NET處理管道之上,因此您希望設置自己的IIdentityIPrincipal是相同的。 據我所知,MVC架構中沒有更好的地方可以設置它們。

注意:這都來自內存。 如果我有問題,請告訴我,我會更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM