7

我已经使用 ASP.net MVC 好几年了。我过去开发的大多数应用程序都是通过旧 Web 应用程序的链接访问的。当用户访问我的一个应用程序时,我的应用程序只是从浏览器中读取一个 cookie,该 cookie 表明用户已通过旧应用程序的身份验证。

现在,我终于开始开发一个需要能够执行身份验证和授权的全新 Web 应用程序了。我确信我可以做一些事情,但我想知道今天的最佳实践是什么。

从 ASP.net WebForms,我熟悉 MembershipProvider 和 RoleProvider 类。我对 Windows Identity Foundatioin (WIF) 也有一点了解。

但是,当我查看默认的 ASP.net MVC 4 应用程序时,“AccountController”类使用了称为 WebSecurity 类的东西。我想知道这是否意味着贬低 MembershipProvider 和 RoleProvider 类。

这应该是一个基本设置,其中包含由另一台服务器提供的用户名/密码身份验证以及对特权资源的基于角色的访问。

今天在 ASP.net MVC 4 中实现这些的最佳实践是什么?

4

2 回答 2

4

在过去的几年中,身份验证一直在不断变化,并且在 Visual Studio 2013 中基于称为 ASP.NET Identity 的东西稳定下来,它提供了一种基于声明的身份方法。但是,这仍处于测试阶段,尚未发布。

在 VS2010 或 2012(.net 4 或 4.5)的 MVC4 中,默认模板基于 Webmatrix Web Pages 技术 WebSecurity 类,这些类又基于 SimpleMembershipProvider,而 SimpleMembershipProvider 本身基于 MembershipProvider。

让我再说一遍。WebSecurity 使用 MembershipProvider,但是许多较新的功能只能通过将提供程序转换为 ExtendedMembershipProvider 或使用 WebSecurity API 来使用。

您仍然可以使用在 ASP.NET 或 MVC3 中使用的旧 SqlMembershipProvider,或者 MS 已发布的任何其他提供程序,例如通用提供程序。

这里的关键是所有这些(ASP.NET Identity 除外)都基于 Membership,并且它们都在某种程度上只是插入到 Membership API 中。

然而,成员资格实际上只是提供用户数据库和验证凭据的能力。除了登录之外,它与验证网页或授权网页几乎没有关系。这就是 FormsAuthentication 或 WindowsAuthentication(或其他)的用武之地,它们提供了 IIdentity 和 IPrincipal 的实现,它们是构建 ASP.NET(和 MVC)身份验证的基本构建块。

当您使用 FormsAuthentication 时,它基本上只是一个 IIdentity 实现。当您使用 RoleProvider 时,它基本上只是一个 IPrincipal 实现。

这些提供了 MVC 中的工具来使用 Authorize 属性来控制对页面的访问,并提供使用 User.IsInRole() 方法来确定用户所在角色的能力。

于 2013-08-07T00:00:34.047 回答
3

"基于声明的授权是 Windows Communication Foundation 中引入的一种新的授权模型。该模型比流行的基于角色的安全模型(IIdentity、IPrincipal)解决了更多的场景。当应用程序需要对表达访问进行复杂和细粒度的控制时,这很有用控制决策。”

基于声明的身份和访问控制指南

替代方案:SimpleMembership

由于最推荐使用 MVC5 APS.NET Identity http://www.asp.net/identity

于 2013-08-06T20:37:33.443 回答