65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET MVC 中的自定义身份验证和授权

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (6投票s)

2015 年 7 月 21 日

CPOL

4分钟阅读

viewsIcon

51127

ASP.NET MVC 中的自定义身份验证和授权

当我们使用 Internet 作为项目模板时,ASP.NET MVC 会为我们提供基本的授权和身份验证功能。它完成了诸如角色成员资格管理、登录凭据验证处理等大部分功能。有关 MVC 应用程序中基本授权的更多信息,请在此处查看我们的文章“深入了解 ASP.NET MVC 的 Authorize 属性”。

简而言之,我们只需使用名为 Authorize 的特性来装饰我们的控制器和操作方法,即可限制匿名用户。这将把匿名用户重定向到登录页面,并且通过一些重写,我们还可以将他们导航到自定义错误页面。但如果我们要开发更具企业级的、安全性至关重要的应用程序,那么它不够灵活。

因此,我们有了自定义ASP.NET MVC 中的授权和身份验证的概念,让我们花点时间来探索一下。

ASP.NET MVC 中的自定义成员资格提供程序

MVC 为我们提供了几个 .NET 内置的成员资格提供程序,实现和使用它们非常简单,但如前所述,它并没有提供足够的灵活性来增强我们的安全性。另一种选择是实现自己的提供程序。

您可能已经注意到,在实现 .NET 提供的默认成员资格时,会创建一个与身份验证和授权相关的架构表,并持久化最终用户创建的凭据。这种解决方法是自动完成的,但在自定义身份验证的情况下,需要从头开始创建,或者可以使用现有应用程序中已有的架构系统。

设置数据库

  • 如果您已经配置了安全数据库,那么您可以跳过此步骤,否则,让我们创建 ASP.NET 安全数据库。
  • 打开 Visual Studio 命令提示符并键入命令“aspnet_regsql”。

    Visual Studio Command Prompt

  • 这将弹出一个 SQL 向导,单击“下一步”。

    ASP.NET SQL Server Setup Wizard

  • 您可以在此处决定是继续使用现有数据库还是替换安全数据库。

    ASP.NET Membership

  • 提供您的服务器名称和数据库,向导将自动加载 ASPNET 安全架构表。

    ASP.NET MVC Membership

    Custom Membership Provider

创建自定义成员资格

  • 打开 Visual Studio 2012 或更高版本,然后创建一个类库项目。

    ASP.NET MVC Custom Membership

  • 现在是时候引用一个名为 System.Web.ApplicationServices 的程序集了。此命名空间为我们提供了各种类,使我们能够访问窗体身份验证角色配置文件应用程序服务。要引用程序集,请右键单击“引用”文件夹,然后选择“添加引用”,再选择“程序集”。搜索或滚动查找前面提到的相应命名空间并添加它。

    Forms Authentication, Roles and Profiles

  • 在此处创建您的自定义身份验证类,例如 WebDevelopmentCustomAuth,并从 MembershipProvider 类派生。

    Custom Authorization

  • MembershipProvider 为我们提供了一个名为“ValidateUser()”的方法,这是需要重写的方法。

    Membership Provider

将自定义身份验证实现到 ASP.NET MVC4 客户端

  • 创建一个全新的 ASP.NET MVC 4 应用程序(模板项目可以是 Internet)。
  • 我们可以替换或在我们的 Web.Config 文件中添加一些成员资格标签,将其映射到我们的自定义身份验证类库。
  • 现在,像往常一样使用 Authorize 特性来装饰所需的控制器或操作方法

    Authorize attribute in ASP.NET MVC

  • 重要的是,我们需要在 Web Config 文件中关闭简单成员资格和自动窗体身份验证。
    <add key= “enableSimpleMembership” value= “false” />
    	<add key= “autoFormsAuthentication” value= “false” />
  • 现在通过按 F5 运行应用程序,然后导航到用 Authorize 特性装饰的操作方法。

    ASP.NET MVC Action Method

  • 您将按预期导航到登录页面。

自定义授权(角色提供程序)

  • 在我们之前的类库项目中,创建一个名为 CustomRoleProvider 的类,该类继承自 RoleProvider 类。
  • RoleProvider 类为我们提供了处理角色的方法,称为 GetRoleForUser()
  • 我们可以用自己的逻辑重写该特定函数。
  • 现在,在我们前面创建的MVC 4 客户端项目中,打开 Web.Config 文件并添加或替换 RoleManager 部分,如下所示。
  • 然后,使用名为 Roles 的属性来装饰 ActionMethod 的 Authorize 属性。
  • 如果我们再次运行应用程序并导航到已装饰的 ActionMethod,那么只有当您的用户名拥有 Administrator 角色时,您才能看到登录。

我们还可以利用第三方身份验证,例如GoogleMicrosoftFacebook 等。这可以通过将我们的 WebDevelopmentCustomAuth 类从 ExtendedMembershipProvider 类派生来实现,其中该类具有 MembershipProvider 类作为其基类。我们还需要引用一个名为 WebMatrix.WebData 的程序集,并可以操作 AccountController 来利用其他社交类型的身份验证。

MVC Third Party Auth

自定义授权和身份验证为我们提供了实现安全性的足够灵活性,这是一个相当广泛的主题。我写了最著名的一种实现方式,希望这能帮助您学习自定义并继续保护您的应用程序。

感谢阅读,让您的应用程序坚不可摧!

您还必须阅读更多关于 ASP.NET MVC 和相关主题的内容

文章 ASP.NET MVC 中的自定义身份验证和授权 最早出现在 Web Development Tutorial

© . All rights reserved.