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

使用 Commerce Server 2002 和 .NET 开发安全解决方案

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.73/5 (5投票s)

2004年4月22日

13分钟阅读

viewsIcon

84200

使用 Commerce Server 2002 和 .NET 开发安全解决方案。

目录

执行摘要

本文档介绍了如何使用 Commerce Server 2002 提供的身份验证票证和 Visual Studio .NET 来构建高度安全的站点。它详细介绍了创建安全 Commerce 站点时面临的挑战、采用身份验证方法的常见配置,并解释了如何实现这些方法以最大限度地提高用户体验和站点安全性。此外,我还将简要介绍开发过程中遇到的一些瓶颈。

背景

什么是身份验证?

身份验证是确定任何计算机上用户身份的过程。用户是否可以访问站点、网络或计算机资源取决于系统、网络或计算机管理员建立的策略。在本文档中,需要身份验证的计算机是 Web 服务器,用户是托管在该服务器上的网站的普通客户。

Commerce Server 包含两个用于用户身份验证的对象——AuthManagerAuthFilter。每个对象都提供多种服务,可以根据您的安全和基于用户的需求进行自定义。您可以同时使用多种身份验证服务。如果站点的不同区域具有不同的安全需求,您可以为每个区域采用单独的身份验证方法。

身份验证服务对象:AuthManager 和 AuthFilter

使用 Commerce Server 的开发人员可以访问两个身份验证服务对象:

  • 由一个名为 AuthManager 的对象提供的 Internet Information Services (IIS) COM+ 组件。
  • 由 Commerce Server 2002 提供的、用于 IIS 的 ISAPI 过滤器,称为 AuthFilter。本文档将重点介绍 AuthFilter,它是目前 Commerce Server 中提供的一种非常强大的身份验证机制。

有关更多信息,请参阅“更多信息”部分。

身份验证票证

Commerce Server 使用身份验证票证来验证访问您站点的用户。身份验证票证是一种用于验证用户的机制。它由属性/值对组成,例如用户 ID 和用户 ID 的值,甚至可以是后面将详细讨论的基于 URL 的值对。例如,userID/joeuser 是身份验证票证中将包含的一个属性/值对。

Commerce Server 票证包含有关访问您站点的用户信息,例如登录 ID、用户上次访问您站点的日期以及表示票证有效时间的窗口。Commerce Server 使用票证来识别和验证用户,并将用户 ID 与其收集到的个人资料信息关联起来。

Commerce Server 使用两种身份验证票证:MSCSProfile 票证和 MSCSAuth 票证。当用户首次访问您的站点时,Commerce Server 会为该用户创建一个 MSCSProfile 票证,并将其写入 HTTP 头。当已注册用户通过身份验证后,Commerce Server 会创建一个 MSCSAuth 票证,并将其写入 HTTP 头。两种票证都可以存储在 cookie 中,或者编码在 URL 查询字符串中。

MSCSAuth 票证

Commerce Server 使用 MSCSAuth 票证来识别和跟踪已注册和已通过身份验证的用户。

MSCSAuth 票证可以存储在会话 cookie 中,或编码在 URL 中。当会话结束时,浏览器会自动删除会话 cookie,用户在重新访问站点时必须重新进行身份验证。在本应用程序中,我们将为已通过身份验证的用户使用这些票证。

MSCSProfile 票证

Commerce Server 使用 MSCSProfile 票证来识别和跟踪访问您站点的匿名用户。对于允许持久 cookie 的用户,MSCSProfile 票证存储在持久 cookie 中。如果用户不允许持久 cookie,则 MSCSProfile 票证会编码在 URL 中。

创建 Commerce Web 应用程序

本节介绍如何创建 Commerce C# ASP.NET Web 应用程序。Commerce Server 2002 安装在您的服务器上后,Commerce 项目将添加到 Visual Studio .NET 项目库中。尽管也可以选择使用 Visual Basic .NET 创建应用程序。以下步骤将指导您创建 Commerce 项目。

  1. 启动 Visual Studio .NET,然后单击 [新建项目] 以打开“新建 Commerce 项目”。

  2. 选择 *Commerce Projects*,然后在模板下,您可以选择列出的任何模板。为演示目的,我选择了 [Commerce C# ASP.NET Web Application],并将位置设置为默认 Web 服务器 [http://<your server>/CommerceWebAppDemo],然后单击 [确定]。

  3. 将显示“Commerce Application Project”向导,单击 [下一步]。

  4. 将显示“Commerce Server Site Packager Quick Unpack”对话框。简要说明对话框:您可以保留站点不变,或键入新站点名称;选择将默认安装应用程序的 Internet Information Services (IIS) 5.0 Web 站点的名称,默认情况下,我将选择 [Default Web site];键入要创建站点数据库的 SQL Server 计算机名称,或保留默认值;选择 MS SQL Server 登录选项。当您使用 Windows 集成身份验证时,用户名和密码不会存储在 SQL Server 连接字符串中,也不会受到 SQL Server 密码重置的影响。确认您的信息,然后单击 [下一步]。

  5. Web 应用程序的解包开始。在 [Data Warehouse] 对话框中,键入全局数据仓库资源服务器的名称;键入数据仓库将使用的 SQL Analysis Services 计算机的名称;键入 Analysis Services 数据库的名称,然后单击 [确定]。

  6. 在“Profiling System”对话框中,接受默认的 *.xml 文件,然后单击 [下一步]。

    简要说明:Profile Schema Definition (*.xml) - 打包站点时,Site Packager 会将配置文件架构从您的 Profiles 数据库中提取出来,并将其存储在 XML 文件中。在此指定该 XML 文件,以便进行解包。

    解包 Solution Site 时,接受默认的 XML 文件 *ProfileDefinition*。此文件包含以下配置文件定义:Address、BlanketPOs、Organization、Targeting Context 和 User Object。

    Site Terms Definition (*.xml) - 打包站点时,Site Packager 会将站点条款定义从您的数据库中提取出来,并将其存储在 XML 文件中。在此指定该 XML 文件,以便进行解包。

    解包 Solution Site 时,接受默认的 XML 文件 *SiteTerms*。此文件包含可供您使用的预定义站点条款。

    Expression Definition (*xml) - 打包站点时,Site Packager 会将您使用 Business Desk 定义的表达式的定义提取出来,并将其存储在 XML 文件中。在此指定该 XML 文件,以便进行解包。

    解包 Solution Site 时,会提供一个默认的 XML 文件 *ExpressionDefinition*。此文件不包含 Solution Sites 的任何预定义表达式。

  7. 在“Profiling System”对话框中,接受默认的 *.xml 文件,然后单击 [确定]。

    接受到 Profiles 数据库的默认连接字符串,或单击“Modify”以配置新的连接字符串。

    Schema definition scripts - 要打包配置文件定义,请使用 SQL Server Enterprise Manager 将定义(架构)从 SQL 数据库导出到 *.sql 文件,然后在该处指定该文件名。

    解包站点时,您将指定此文件,以便将定义解包到运行时数据存储(存储用户、地址、组织等数据的 SQL 表)中。

    Data population scripts - 如果您已从 Profiles 数据库提取了配置文件数据,则可以指定数据填充脚本,以便在解包时,配置文件数据将被导入到运行时数据存储(存储用户、地址、组织等数据的 SQL 表)中。

  8. 单击 [确定]。将创建一个新的 C# ASP.NET Commerce Server 项目。

启用 AuthFilter

本节详细介绍启用站点(或换句话说,Commerce Web 应用程序)使用 AuthFilter 所涉及的配置机制和步骤。

关于 Commerce 项目

默认情况下,会有一个 *AuthFilter* 文件夹,它使 Web 应用程序具有安全的身份验证机制。用户也可以选择使用不同的名称创建自己的 *AuthFilter* 文件夹。您可以通过如下所示的 Commerce Server Manager 进行导航。

配置 Login.aspx 以使用基于 GUID 的 URL 身份验证

此示例代码片段向您展示了如何在 *Login.aspx* Web 窗体的代码隐藏中编写代码,该代码将用于在不同的 URL 上使用登录名和密码进行用户身份验证。简而言之,可以将此代码放置在两个部分:第一部分放在 Page_Load 函数下,第二部分放在 Button_Click 事件下。此代码可确保用户将根据其官方(公司)URL 进行身份验证。在这种情况下,除了当前 URL 外,他还可以导航到其他公司的 URL。

第一部分

第二部分

配置 Commerce Server 全局资源

您可以随时更改全局资源使用的属性和数据库连接字符串。

配置全局资源

  • 展开 Commerce Server Manager,然后展开“Global Resources”。
  • 右键单击要配置的全局资源,然后单击“Properties”。
  • 在“ Properties”对话框的“Properties”选项卡上,配置全局资源的属性。对于要配置的每个属性,选择该属性,然后在“Selected Property Value”框中键入值。
  • 同样,您也可以像下面一样更改 *AuthFilter* 文件夹名称和其他属性。

当您使用 Commerce Server Manager 更改全局资源的属性或 *AuthFilter* 文件夹名称时,更改可能不会立即反映在 Commerce Server Business Desk 或使用全局资源的应用程序的网页中。要刷新这些更改,请重新启动使用这些值的所有服务。有关说明,请参阅下面的“Restarting IIS Services”部分。

配置 Commerce Site 资源

您可以随时更改站点资源使用的属性。站点使用的所有站点资源都会在站点级别公开一个对象。在 Commerce Server Manager 中更改属性后,必须重新启动使用这些值的所有服务。有关说明,请参阅下面的“Restarting IIS Services”部分。

自定义身份验证

当您使用自定义身份验证时,Commerce Server 站点的每个 ASPX 或 ASP 页面以及目录都需要登录访问。AuthFilter 会检查 Commerce Server 站点的虚拟目录,并检查 Commerce Server Administration 数据库以确定该站点是否启用了自定义身份验证。

当请求访问 ASPX 页面或目录时,如果用户提交的 MSCSAuth 票证无效,AuthFilter 会要求用户输入登录信息。当用户将凭据提交到登录页面时,登录页面会从 SQL Server 数据库或其他类型的数据库中获取凭据验证。

用户通过身份验证后,*Login.aspx* 页面会颁发一个 MSCSAuth 票证。当 AuthFilter 验证请求以确定是否允许该请求被处理时,将检查 MSCSAuth 票证。

在此模式下,AuthFilter 允许站点设计者提供自定义身份验证过程来控制对站点的访问,同时仍然使用 AuthFilter 的基本服务。

使用 AuthFilter 启用自定义身份验证

对于自定义身份验证实现,请使用 AuthFilter 将其集成到您的站点中。如果您选择自定义身份验证,AuthFilter 会检查是否存在有效的 MSCSAuth 票证。如果找不到有效的 MSCSAuth 票证,用户将被重定向到一个登录页面,您可以在该页面通过验证凭据并在成功时设置 MSCSAuth 票证来执行自定义身份验证。

启用自定义身份验证模式

  • 展开 Commerce Server Manager,展开“Commerce Sites”,然后单击您要管理的站点。
  • 展开“Applications”,右键单击您要使用的应用程序的名称,然后单击“Properties”。
  • 在“Properties”对话框的“General”选项卡上,在“Authentication filter”框中,选择“Custom Authentication”,然后单击“OK”。
  • AuthFilter 将用户请求重定向到 *Login.aspx* 页面,该页面会根据 SQL Server 数据库或其他类型的数据存储来验证用户的登录名和密码。
  • 请参阅下面的图示,以了解身份验证过滤器的详细信息。

在 Commerce Server Manager 中更改属性值后,必须从每个 Web 服务器的内存中卸载应用程序才能使更改生效。有关说明,请参阅下面的“Restarting IIS Services”部分。

重启 IIS 服务

重启 IIS

当您更改 CS Authentication 资源使用的属性时,必须停止然后重新启动 IIS。重新启动 IIS 会将所有 Web 应用程序从内存中卸载,重新启动 IIS 服务并刷新缓存。因此,在重新启动 IIS 时,无需再卸载应用程序的内存。

在 CS Authentication 资源中执行以下任何任务时,都必须重新启动 IIS:

  • 配置 CS Authentication 资源属性
  • 启用跨域/应用程序的 cookie 共享
  • 启用 AuthFilter
  • 禁用 AuthFilter

注意:请勿使用 IISReset 命令重新启动 IIS。尽管 IISReset 会停止然后重新启动 IIS,但在某些情况下,它不会停止然后启动 *Inetinfo.exe*(W3SVC 服务)。例如,如果 W3SVC 服务已配置为手动启动而不是自动启动,则不会重新启动。

重新启动 IIS

  • 单击 *Start*,然后单击 *Run*。
  • 在“*Run*”对话框的“*Open*”文本框中,键入 *net stop iisadmin*,然后单击 *OK*。
  • 在提示“Do you want to continue this operation?”时,键入 *Y* 并按 [Enter]。
  • IIS 将停止。请注意,*iisadmin* 和 W3SVC 服务都通过上一步的命令停止。

开发瓶颈

本节详细介绍了在使用 Commerce Server 2002 和 Visual Studio .NET 开发过程中遇到的实际问题。

实际问题和解决方法

  1. 启用 AuthFilter 后,无法调试应用程序。将显示以下消息:

    解决方法:

    • 应将 AuthFilter 禁用为“No Filter”模式。
    • 重新启动 IIS 服务。
    • 或者,您也可以使用 System.Diagnostics.Debugger.Break() 进行调试。
  2. 无法再次打开项目,将显示以下对话框。当您使用 Visual Studio .NET 开发站点并启用了 AuthFilter 时,当 Visual Studio .NET 尝试连接到站点时,AuthFilter 会执行重定向,因此 Visual Studio .NET 无法打开项目。

    解决方法:

    • 应将 AuthFilter 禁用为“No Filter”模式。禁用 AuthFilter 并不会将其从 IIS 进程空间中卸载,直到 IIS 重新启动;它仅从 metabase 中删除 AuthFilter 条目。
    • 因此,也请重新启动 IIS 服务。
  3. 使用 VS.NET 开发 Commerce Server 站点并不容易,因为系统在调试时会变得非常慢,并且会影响开发人员的生产力。

    解决方法:

    • 应尽量减少调试 Commerce Server 应用程序,并尝试在常规的 ASP.NET 应用程序中编写代码,最后进行集成。

摘要

本文档简要介绍了创建和配置安全的 Commerce Server ASP.NET Web 应用程序。此外,它还演示了如何启用 Commerce Server 站点以使用 AuthFilter 并确保用户安全访问。以下几点进行了简要总结:

  • 身份验证的基本功能和 AuthFilter 的用法
  • 需求和挑战
  • 创建安全的 Commerce Server 项目并通过 AuthFilter 启用自定义身份验证
  • 开发过程中的瓶颈

更多信息

© . All rights reserved.