生产网站上的用户和角色(VB)

作者 :斯科特·米切尔

注释

自本文撰写以来,ASP.NET 成员身份提供程序已被 ASP.NET 标识取代。 强烈建议更新应用以使用 ASP.NET 标识 平台,而不是本文撰写时精选的成员资格提供程序。 ASP.NET 标识在 ASP.NET 成员身份系统中具有许多优势,包括:

  • 性能更好
  • 改进了可扩展性和可测试性
  • 支持 OAuth、OpenID Connect 和双因素身份验证
  • 基于声明的标识支持
  • 与 ASP.Net Core 更好的互操作性

ASP.NET 网站管理工具(WSAT)提供基于 Web 的用户界面,用于配置成员资格和角色设置以及创建、编辑和删除用户和角色。 遗憾的是,WSAT 仅在从 localhost 访问时有效,这意味着无法通过浏览器访问生产网站的管理工具。 好消息是,有一些解决方法可以管理用户和生产角色。 本教程将介绍这些解决方法和其他解决方法。

介绍

ASP.NET 2.0 引入了许多 应用程序服务,这是一套可以添加到 Web 应用程序的构建基块服务。 我们在“配置使用应用程序服务的网站”教程中,将成员资格和角色服务添加到书评网站。 成员身份服务有助于创建和管理用户帐户;角色服务提供用于将用户分类为组的 API。 书籍评论网站有三个用户帐户(Scott、Jisun 和 Alice),以及一个管理员角色,其中 Scott 和 Jisun 担任管理员角色。

ASP.NET 的应用程序服务不绑定到特定实现。 相反,你指示应用程序服务使用特定 提供程序,并且该提供程序使用特定技术实现该服务。 我们将 Book Reviews Web 应用程序配置为使用 SqlMembershipProviderSqlRoleProvider 提供程序分别为成员资格和角色服务。 这两个提供程序在 SQL Server 数据库中存储用户帐户和角色信息,是 Web 托管公司中托管的基于 Internet 的 Web 应用程序的最常用的提供程序。

对于使用成员资格和角色服务的开发人员来说,常见的挑战是管理生产环境中的用户和角色。 如何从生产网站中删除用户帐户、添加新角色或将现有用户添加到现有角色? 本教程探讨在生产网站上管理用户和角色的不同技术。

使用 ASP.NET 网站管理工具

ASP.NET 包括 网站管理工具 (WSAT),使创建和管理用户帐户和角色变得容易,并指定基于用户和角色的授权规则。 若要使用 WSAT,请单击解决方案资源管理器中的 ASP.NET 配置图标,或转到“网站或项目”菜单,然后选择“ASP.NET 配置”选项。 任一方法启动 Web 浏览器,并将其指向地址上的 WSAT,例如: http://localhost:portNumber/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=pathToApplication

WSAT 分为三个部分:

  • 安全性 - 管理用户、角色和授权规则。
  • ApplicationConfiguration - 从此处管理 <appSettings> 和 SMTP 设置。 还可以使应用程序脱机并在此处管理调试和跟踪设置,并指定默认自定义错误页。
  • ProviderConfiguration - 配置应用程序服务使用的提供程序。

“安全性”部分( 如图 1 所示)包括用于创建新用户、管理用户、创建和管理角色以及创建和管理访问规则的链接。 在这里,你可以向系统添加新角色、删除现有用户,或者从特定用户帐户添加或删除角色。

ASP.NET 网站管理工具的屏幕截图,用于创建和管理用户、角色以及访问规则。

图 1:WSAT 安全部分包括用于管理用户和角色的选项
单击可查看全尺寸图像

遗憾的是,WSAT 只能在本地访问。 无法在远程生产网站上访问 WSAT;如果访问 www.yoursite.com/asp.netwebadminfiles/default.aspx,将收到 404 未找到的响应。 为 WSAT 提供支持的代码使用 Membership .NET Framework 中的和 Roles 类来创建、编辑和删除用户和角色。 这些类咨询 Web 应用程序的配置信息以确定要使用的提供程序;返回“ 配置使用应用程序服务的网站 ”教程 ,我们将设置书籍评论网站以使用 SqlMembershipProviderSqlRoleProvider 提供程序。 这需要将<membership><roleManager>部分添加到Web.config中。

<?xml version="1.0"?>
<configuration>
  ...

  <connectionStrings configSource="ConfigSections\databaseConnectionStrings.config" />

  <system.web>
  ...

  <membership defaultProvider="ReviewMembership">
  <providers>
  <clear />

  <add type="System.Web.Security.SqlMembershipProvider" 
  name="ReviewMembership" 
  connectionStringName="ReviewsConnectionString" 
  applicationName="BookReviews" />
  </providers>
  </membership>

  <roleManager enabled="true" defaultProvider="ReviewRole">
  <providers>
  <clear />

  <add type="System.Web.Security.SqlRoleProvider" 
  name="ReviewRole" 
  connectionStringName="ReviewsConnectionString" 
  applicationName="BookReviews" />
  </providers>
  </roleManager>
  </system.web>

  ...
</configuration>

请注意,<membership><roleManager>各部分在其type属性中分别引用SqlMembershipProviderSqlRoleProvider提供程序。 这些提供程序将用户和角色信息存储在指定的 SQL Server 数据库中。 这些提供程序使用的数据库由 connectionStringName 属性指定, ReviewsConnectionString该属性在 ~/ConfigSections/databaseConnectionStrings.config 文件中定义。 回想一下, databaseConnectionStrings.config 开发环境中的文件包含开发数据库的连接字符串,而 databaseConnectionStrings.config 生产中的文件包含生产数据库的连接字符串。

简言之,WSAT 必须通过开发环境在本地访问,并且它通过文件中指定的数据库来处理用户和角色信息。 因此,如果我们更改开发环境中的文件中的连接字符串信息 databaseConnectionStrings.config ,则可以在本地使用 WSAT 来管理生产环境中的用户和角色。

为了说明此功能,请在开发环境中打开 databaseConnectionStrings.config Visual Studio 中的文件,并将开发数据库连接字符串替换为生产数据库连接字符串。 然后启动 WSAT,转到“安全”选项卡,并添加名为 Sam 的新用户。 图 2 显示了创建此帐户时的 WSAT 屏幕。

ASP.NET网站管理工具的截图,用于在生产环境中创建新用户。

图 2:在生产环境中创建名为 Sam 的新用户
单击可查看全尺寸图像

由于我们更改了连接字符串 databaseConnectionStrings.config 以指向生产数据库服务器,因此 Sam 已添加为生产环境中的用户。 若要验证这一点,请将文件中的连接字符串 databaseConnectionStrings.config 更改回开发数据库,然后访问 Login.aspx 开发环境中的页面。 尝试以 Sam 身份登录(请参阅 图 3)。

创建新用户无法在开发环境中登录的登录屏幕的屏幕截图。

图 3:无法在开发环境中以 Sam 的身份登录
单击可查看全尺寸图像

无法在开发环境中以 Sam 身份登录,因为本地数据库中不存在用户帐户信息。 而是被直接添加到了生产数据库。 若要验证这一点,请查看开发和生产数据库中表的内容 aspnet_Users 。 在开发环境中,用户 Scott、Jisun 和 Alice 只有三条记录。 但是,生产数据库中的 aspnet_Users 表有四条记录:Scott、Jisun、Alice 和 Sam。 因此,Sam 可以通过生产中的网站登录,但不能通过开发环境登录。

截图显示新创建用户在生产网站登录的登录屏幕。

图 4:Sam 可以在生产网站上登录
单击可查看全尺寸图像

注释

在完成 WSAT 的任务后,不要忘记将 databaseConnectionStrings.config 文件中的连接字符串更改回开发数据库的连接字符串,否则通过开发环境测试站点时会使用线上数据进行测试。 另请记住,虽然我们刚刚讨论的技术允许我们使用 WSAT 远程管理用户和角色,但对任何其他 WSAT 配置选项(访问规则、SMTP 设置、调试和跟踪设置等)的更改将修改 Web.config 该文件。 因此,对设置所做的任何更改都适用于开发环境,不适用于生产环境。

创建自定义用户和角色管理网页

WSAT 提供用于管理用户和角色的现成系统,但只能在本地启动,并且需要更改连接字符串信息,以便管理生产中的用户和角色。 支持用户帐户的大多数网站还包括许多用户和角色管理网页,使管理员能够从网站中的页面管理用户和角色。 这些基于 Web 的管理页面可以很容易地管理用户和角色,并且对于可能拥有许多管理员,或没有访问权限或技术背景使用 Visual Studio 启动 WSAT 的网站来说,是必不可少的。

ASP.NET 包括许多与登录相关的内置 Web 控件,这些控件使实现其中许多管理网页变得像拖放一样简单。 例如,可以通过将 CreateUserWizard 控件拖动到页面上并设置几个属性,为管理员创建一个新用户帐户创建一个页面。 事实上,在 图 2 中展示的 WSAT 的用户创建页面使用了你可以添加到页面的相同 CreateUserWizard 控件。 此外,可以通过 .NET Framework 中的 MembershipRoles 类以编程方式访问成员资格和角色服务的功能。 使用这些类,可以编写代码来创建、编辑和删除用户和角色,以及添加或删除用户到角色、确定哪些用户属于哪些角色以及执行其他用户和角色相关的任务。

“配置使用应用程序服务的网站”教程中,我向名为CreateAccount.aspx的文件夹添加了一个页面Admin。 此页面允许管理员向网站添加新用户帐户,并指定新创建的用户是否处于管理员角色(请参阅 图 5)。

管理员能够创建新用户帐户的屏幕截图。

图 5:管理员可以创建新的用户帐户
单击可查看全尺寸图像

欲更详细地了解如何构建用户和角色管理页面,以及使用MembershipRoles类与登录相关的 ASP.NET Web 控件的分步说明,请务必阅读我的网站安全教程。 你将找到有关如何生成网页以创建新帐户、创建和管理角色、将用户分配到角色和其他常见管理任务的指南。

若要在生产网站上实现类似 WSAT 的功能,始终可以构建自己的一系列实现 WSAT 功能的网页。 若要帮助入门,请查看位于文件夹中 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles的 WSAT 源代码。 另一种选择是使用 Dan Clem 的 WSAT 替代方法,他在文章《滚动自己的网站管理工具》中分享了该选项。 Dan 引导读者完成构建自定义 WSAT 类工具的过程,包括应用程序的下载源代码(在 C# 中),并提供将自定义 WSAT 添加到托管网站的分步说明。

概要

ASP.NET 网站管理工具(WSAT)可与成员资格和角色应用程序服务结合使用,以管理网站的用户和角色信息。 遗憾的是,WSAT 只能在本地访问,无法从生产网站访问。 但是,通过将开发环境中的连接字符串更改为指向生产数据库,可以使用 WSAT 来管理生产网站上的用户和角色。

虽然 WSAT 方法提供了一种快速而简单的方法来管理用户和角色,但它需要从 Visual Studio 启动 WSAT 以及对连接字符串信息的临时更改。 WSAT 提供了一种管理生产用户和角色的快速方法,但对于具有多个管理员或不熟悉 Visual Studio 和 WSAT 的管理员的网站来说,这很繁琐,而且效果不佳。 出于这些原因,支持用户帐户的大多数网站都包含一组管理网页。 这样一组网页消除了对 WSAT 的需求,并且可以让各种管理用户从任何计算机使用。

快乐编程!

深入阅读

有关本教程中讨论的主题的详细信息,请参阅以下资源: