的IPrincipal
量是针对每个Web请求,创建一个包含与用户和他们的角色的身份信息的安全上下文。
和IPrincipal
包含具有Name
,IsAuthenticated
和AuthenticationType
属性的IIdentity
。
定制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架构中没有更好的地方来设置它们。
注:这是所有从内存。如果我有什么问题,请告诉我,我会更新。
这正是我所需要的。谢谢! – Joe 2011-04-10 09:47:19
请注意,在MVC 5中,Microsoft从MembershipProvider中移除了ASP.net Identity。 – Brian 2017-10-13 20:31:25