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有更好的方法

ASP.. NET MVC: MembershipUser, Identity, MembershipProvider和

IPrincipal是为每个web请求创建的安全上下文,包含与用户身份和角色相关的信息。

一个IPrincipal包含一个具有NameIsAuthenticatedAuthenticationType属性的IIdentity

自定义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之上的。. NET处理管道,您想要设置自己的IIdentityIPrincipal的地方是相同的。据我所知,在MVC架构中没有更好的地方来设置它们。

注意:这些都是来自记忆。如果我有什么问题,请让我知道,我会更新。