我需要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包含具有IIdentityNameIsAuthenticated属性的 AuthenticationType

自定义MembershipProvider是从抽象类MembershipProvider派生的类,用于提供有关使用您的应用程序的用户的自定义数据。该提供程序将对 MembershipUser 类型进行操作,并可用于获取特定用户或多个用户的数据,创建新用户等。您可以从MembershipUser继承以创建自己的用户类型,并且通常还想在使用自己的用户类型时执行此操作提供者。

当您访问应用程序时,会创建一个IPrincipalIIdentity并将其分配给 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处理管道的顶部,因此您想要设置自己的IIdentityIPrincipal的位置是相同的。据我所知,在MVC架构中没有比这更好的地方了。

注意:这全部来自内存。如果我有什么问题,请告诉我,我会更新。

关于c# - ASP.NET MVC:MembershipUser,Identity,MembershipProvider和Principal之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5610506/

10-13 06:26