我已经使用 ASP.net MVC 好几年了。我过去开发的大多数应用程序都是通过遗留 Web 应用程序的链接访问的。当用户访问我的一个应用程序时,我的应用程序只是从浏览器读取一个 cookie,指示用户已通过旧应用程序进行身份验证。
现在,我终于要开发一个全新的 Web 应用程序,它需要能够执行身份验证和授权。我确信我可以做一些事情,但我想知道今天的最佳实践是什么。
在 ASP.net WebForms 中,我熟悉 MembershipProvider 和 RoleProvider 类。我也对 Windows Identity Foundatioin (WIF) 有一点熟悉。
但是,当我查看默认的 ASP.net MVC 4 应用程序时,“AccountController”类使用称为 WebSecurity 类的东西。我想知道这是否意味着贬低 MembershipProvider 和 RoleProvider 类。
这应该是另一个服务器提供的用户名/密码身份验证和对特权资源的基于角色的访问的基本设置。
今天在 ASP.net MVC 4 中实现这些的最佳实践是什么?
最佳答案
身份验证在过去几年一直在不断变化,并且在 Visual Studio 2013 中稳定在称为 ASP.NET Identity 的东西上,它提供了一种基于声明的身份方法。但是,这仍处于测试阶段,尚未发布。
在 VS2010 或 2012(.net 4 或 4.5)的 MVC4 中,默认模板基于 Webmatrix 网页技术 WebSecurity 类,而这些类又基于 SimpleMembershipProvider,而 SimpleMembershipProvider 本身基于 MembershipProvider。
让我再说一遍。 WebSecurity 使用 MembershipProvider,但是许多较新的功能只能通过将提供程序转换为 ExtendedMembershipProvider 或使用 WebSecurity API 来使用。
您仍然可以使用在 ASP.NET 或 MVC3 中使用的旧 SqlMembershipProvider,或者 MS 发布的任何其他提供程序,例如通用提供程序。
这里的关键是所有这些(ASP.NET Identity 除外)都基于 Membership,并且它们在某种程度上都只是插入 Membership API。
然而,成员(member)资格实际上只是提供用户数据库和验证凭据的能力。除了登录,它与对网页进行身份验证或对网页进行授权几乎没有关系。这就是 FormsAuthentication 或 WindowsAuthentication(或其他)的用武之地,它们提供了 IIdentity 和 IPrincipal 的实现,它们是构建 ASP.NET(和 MVC)身份验证的基本构建块。
当您使用 FormsAuthentication 时,它基本上只是一个 IIdentity 实现。当您使用 RoleProvider 时,它基本上只是一个 IPrincipal 实现。
这些在 MVC 中提供了使用 Authorize 属性来控制对页面的访问的工具,并提供了使用 User.IsInRole() 方法来确定用户所处角色的能力。
关于.net - 今天如何在 ASP.net MVC 4 中进行授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535464/