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

作者 :Scott Mitchell

注意

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

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

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

简介

ASP.NET 2.0 引入了许多 应用程序服务,这些服务是一套可添加到 Web 应用程序的构建基块服务。 在 配置使用应用程序服务的网站 教程中,我们已将成员资格和角色服务添加到书评网站。 成员资格服务有助于创建和管理用户帐户;角色服务提供用于将用户分类为组的 API。 Book Reviews 站点有三个用户帐户(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 中显示的“安全性”部分 () 包含用于创建新用户、管理用户、创建和管理角色以及创建和管理访问规则的链接。 在这里,你可以向系统添加新角色、删除现有用户,或者从特定用户帐户添加或删除角色。

A S P 的屏幕截图。用于创建和管理用户和角色以及访问规则的 N E T 网站管理工具。

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

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

<?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> 部分分别引用SqlMembershipProvidertype 属性中的 和 SqlRoleProvider 提供程序。 这些提供程序将用户和角色信息存储在指定的 SQL Server 数据库中。 这些提供程序使用的数据库由 connectionStringName 文件中定义的 ~/ConfigSections/databaseConnectionStrings.config 属性 ReviewsConnectionString指定。 回想一下, databaseConnectionStrings.config 开发环境中的 文件包含开发数据库的连接字符串,而生产中的 databaseConnectionStrings.config 文件包含生产数据库的连接字符串。

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

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

A S P 的屏幕截图。用于在生产环境中创建新用户的 N E T 网站管理工具。

图 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 控件。 此外,成员资格和角色服务的功能可通过 Membership .NET Framework 中的 和 Roles 类以编程方式提供。 借助这些类,可以编写代码来创建、编辑和删除用户和角色,以及在角色中添加或删除用户、确定哪些用户具有哪些角色,以及执行与用户和角色相关的其他任务。

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

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

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

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

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

摘要

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

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

编程快乐!

深入阅读

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