.net - 今天如何在 ASP.net MVC 4 中进行授权?

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

我已经使用 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/

相关文章:

c# - ASP.NET MVC 错误 : The attempted operation is not supported for the type of object referenced

.net - SqlCommand.Prepare() 有什么作用,应该在什么时候使用?

mysql - 使用散列密码进行身份验证?

c# - 谷歌通讯录 API

php - PHP 中的散列以使用安全密码登录

objective-c - Mac OS X 相当于 SecureZeroMemory/RtlSecureZeroMemory?

c# - 如何在 C# 中的 Winform 中嵌入 R 图?

javascript - 保护 Javascript/AngularJS 中的刷新 token

asp.net-mvc - Razor actionlink 自动生成 URL 中的 length=7?

asp.net-mvc-4 - 预加载并禁用 EditorFor