【问题标题】:How to do authorization in ASP.net MVC 4 today?今天如何在 ASP.net MVC 4 中进行授权?
【发布时间】:2013-07-08 20:31:24
【问题描述】:

我已经使用 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 中实现这些的最佳实践是什么?

【问题讨论】:

标签: .net security asp.net-mvc-4 membership-provider roleprovider


【解决方案1】:

在过去几年中,身份验证一直在不断变化,并且在 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 已发布的任何其他提供程序,例如 Universal Providers。

这里的关键是所有这些(除了 ASP.NET 身份)都是基于成员资格的,并且它们都在某种程度上只是插入到成员资格 API 中。

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

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

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

【讨论】:

    【解决方案2】:

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

    A Guide to Claims-Based Identity and Access Control

    替代方案:SimpleMembership

    由于 MVC5 最推荐 APS.NET 身份http://www.asp.net/identity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多