ASP.NET 数据流

在 ASP.NET 应用程序中进行安全设计有许多不同的方法。本节描述用于两种通用方案的数据流:模拟和使用 Cookie 的 Forms 身份验证。

方案 1:模拟

该方案根据 Internet 信息服务 (IIS) 身份验证和 Microsoft Windows NT® 文件访问安全,将对 ASP.NET 应用程序自身的安全性程序设计减少到最少。下面的插图显示了数据流。

模拟

插图显示了以下事件顺序:

  1. 来自网络客户端的访问请求到达 IIS。
  2. IIS 使用基本身份验证、摘要式身份验证或集成 Windows 身份验证(NTLM 或 Kerberos)对客户端进行验证。
  3. 如果客户端通过身份验证,IIS 就会将已验证的请求移交给 ASP.NET。
  4. ASP.NET 应用程序使用由 IIS 传递的访问令牌来模拟正在请求的客户端,并依赖 NTFS 文件权限授权访问要求。ASP.NET 应用程序仅需要验证 ASP.NET 配置文件中的内容,将启用模拟的指令设置为 true,则不需要编写任何 ASP.NET 安全代码。

    请注意如果没有启用模拟,应用程序就会以 IIS 进程标识运行。对于 Microsoft Windows® 2000 Server 和 Windows XP,默认的标识是在 ASP.NET 安装时自动创建的、名称为 ASPNET 的用户帐户。对于 Microsoft Windows Server 2003 家族产品,默认标识是 Network Service 帐户。如果要限制访问,必须使用授权的其他方法,例如 URL 授权。

    有关在 ASP.NET 应用程序中使用模拟的详细信息,请参阅模拟通过 ASP.NET 模拟使用 IIS 身份验证

  5. 如果被授予了访问权限,则 ASP.NET 应用程序将通过 IIS 返回所请求的页面。

方案 2:Forms 身份验证

在该方案中,应用程序使用 ASP.NET Forms 身份验证,该过程可使应用程序收集直接来自客户端请求者的凭据(如名称和密码),并对其可靠性做出自己的判断。虽然应用程序并不使用 IIS 身份验证,但 IIS 身份验证设置对于 ASP.NET Forms 验证过程非常重要。除非您决定拒绝所有不符合已启用的 IIS 身份验证方法标准的请求,否则必须启用 IIS“匿名访问”设置。

注意 注意 如果没有启用 IIS“匿名访问”设置,不符合 IIS 身份验证标准的请求将被拒绝而且永远不会到达 ASP.NET 应用程序。

该方案中的数据流如下图所示。

Forms 身份验证

该插图显示了以下的事件顺序:

  1. 客户端生成一个对受保护资源的请求。
  2. IIS 接收到该请求,如果该请求者经过 IIS 身份验证,或启用了 IIS“匿名访问”,则请求将传递到 ASP.NET 应用程序。在这种情况下,因为 ASP.NET 应用程序中的身份验证模式设置为 Forms,所以没有使用 IIS 身份验证。
  3. 如果没有 Cookie 附加到该请求,ASP.NET 将该请求重定向到登录页面,其页面路径保存在应用程序的配置文件中。在登录页面上,客户端输入必需的凭据(通常是名称和密码)。
  4. 应用程序代码检查凭据以确认其可靠性,通常在事件处理程序中。如果凭据通过了身份验证,则应用程序代码将附加上包含用户名称(但没有密码)的票据,例如 Cookie。如果没有通过身份验证,该请求通常返回“访问拒绝”信息或再次显示登录页面。
  5. 应用程序发出票据以后,ASP.NET 会使用消息身份验证检查来检查票据的有效性。应用程序不需要 *.config 文件中的凭据。实际上,ASP.NET 在发出 Cookie 后并不检查凭据,即使它们存在。
  6. 如果用户通过了身份验证,ASP.NET 会检查授权,然后允许访问最初所请求的、受保护的资源,或将请求重定向到其他页面上,这取决于应用程序的设计。它也可以将请求定向到自定义的授权模块上,在该模块中将检查凭据,以用于对所访问的受保护资源进行授权。如果没有通过授权,ASP.NET 会始终重定向到登录页面。
  7. 如果用户已被授权,则允许对受保护资源的访问;或应用程序在对受保护资源授权以前可能要求附加的凭据验证,这取决于应用程序的设计。


相关主题


© 1997-2003 Microsoft Corporation。保留所有权利