ASP.. NET MVC: MembershipUser, Identity, MembershipProvider和
本文关键字:Identity MembershipProvider MembershipUser NET MVC ASP | 更新日期: 2023-09-27 17:49:31
我需要一些功能在一个ASP。在做了一些研究之后,我觉得我必须实现自定义MembershipUser, MembershipProvider, Identity和Principal。我的问题是:我不理解MembershipUser和Identity之间的关系(如果有的话),也不理解MembershipProvider和Principal之间的关系。谁能给我点灯。我在网上找到了一些关于这四种玩家的文章和教程,但是没有一篇文章能够完全解决他们之间的关系。
还有:是否有一种优雅的方式将自定义主体分配给Context ?在Global.asax?我已经看到了很多关于如何在ASP中做到这一点的例子。. NET WebForms应用程序,我想知道如果ASP。. NET MVC有更好的方法
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之上的。. NET处理管道,您想要设置自己的IIdentity
和IPrincipal
的地方是相同的。据我所知,在MVC架构中没有更好的地方来设置它们。
注意:这些都是来自记忆。如果我有什么问题,请让我知道,我会更新。