2011-04-10 69 views
14

我需要在ASP.NET MVC应用程序,并做一些研究后的一些功能,我觉得我一定要实现自定义的MembershipUser,的MembershipProvider,身份和校长。 我的问题是:我不明白的关系,如果有的话,和的MembershipUser身份和确切位置的MembershipProvider和校长来到这个画面之间。 有人能请一些光。我在网络上发布了几篇有关所有四名球员的文章和教程,但没有一篇充分说明了他们之间的关系。ASP.NET MVC:的MembershipUser,身份的MembershipProvider之间的关系主要

另外:有没有AuthenticateRequest在Global.asax中分配定制校长Context.User以外的一个优雅的方式?我已经看到了很多关于如何在ASP.NET WebForms应用程序中执行此操作的示例,并且我想知道ASP.NET MVC是否有更好的方法。

回答

27

IPrincipal量是针对每个Web请求,创建一个包含与用户和他们的角色的身份信息的安全上下文。

IPrincipal包含具有Name,IsAuthenticatedAuthenticationType属性的IIdentity

定制MembershipProvider是派生自抽象类MembershipProvider的类,用于提供有关使用您的应用程序的用户的自定义数据。供应商将使用MembershipUser类型,可用于获取特定用户或用户的数据,创建新用户等。您可以继承MembershipUser以创建自己的用户类型,并且在使用自己的用户类型时可能通常会这样做供应商。

当访问一个应用程序,一个IPrincipalIIdentity被创建和分配给HttpContext.Current.UserThread.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架构中没有更好的地方来设置它们。

注:这是所有从内存。如果我有什么问题,请告诉我,我会更新。

+0

这正是我所需要的。谢谢! – Joe 2011-04-10 09:47:19

+0

请注意,在MVC 5中,Microsoft从MembershipProvider中移除了ASP.net Identity。 – Brian 2017-10-13 20:31:25