ASP.NET 安全数据流

更新:2007 年 11 月

可以通过多种方法来设计 ASP.NET 应用程序的安全性。本主题描述两种常用方案的安全数据流:模拟和使用 Cookie 的 Forms 身份验证。

方案 1:模拟

模拟方案依赖于 Microsoft Internet 信息服务 (IIS) 身份验证和 Microsoft Windows 文件访问安全性以最大限度地减少 ASP.NET 应用程序本身在安全性方面的编程量。数据流如下图所示。

模拟
包含用户模拟的 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 安全码。

    如果未启用模拟,则应用程序将使用 ASP.NET 进程标识运行。对于 Microsoft Windows 2000 Server 和 Windows XP Professional,默认标识是在安装 ASP.NET 时自动创建的名为 ASPNET 的本地帐户。对于 Microsoft Windows Server 2003,默认标识是用于 IIS 应用程序的应用程序池标识(默认情况下为 NETWORK SERVICE 帐户)。

    xa68twcb.alert_note(zh-cn,VS.90).gif说明:

    如果未启用模拟并要限制对特定用户或用户组的访问(如使用 Forms 身份验证进行验证的用户),则必须使用某些其他授权方式(如 URL 授权)。有关 URL 授权的更多信息,请参见 ASP.NET 授权

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

  5. 如果允许访问,则 ASP.NET 应用程序通过 IIS 返回请求的资源。

方案 2 - Forms 身份验证

在 Forms 身份验证方案中,应用程序直接从用户那里收集名字和密码等凭据,并自己判断这些信息的真实性。应用程序不使用 IIS 身份验证,但 IIS 身份验证设置可以影响 Forms 身份验证。作为一项原则,当您使用 Forms 身份验证时,请在 IIS 中启用匿名访问。否则,如果用户未通过 IIS 身份验证,他们甚至无法访问应用程序以便向 Forms 身份验证提供用户名和密码。

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

Forms 身份验证
cookie 流

此图说明下面的事件序列:

  1. 用户生成对受保护资源的请求。

  2. IIS 接收请求,并且由于已启用 IIS 匿名访问,IIS 不执行任何用户身份验证,而将请求传递给 ASP.NET 应用程序。

  3. 由于 ASP.NET 身份验证模式设置为 Forms,ASP.NET 应用程序将检查 Forms 身份验证票的请求(特定 Cookie)。如果没有连接到请求的身份验证票,则 ASP.NET 将请求重定向到应用程序的配置文件中指定的登录页。

  4. 用户在登录页上输入所需凭据(通常为用户名和密码)。应用程序代码检查凭据以确认它们的真实性。如果凭据通过身份验证,应用程序代码将身份验证票连接到表示用户凭据的响应。(不包括密码)。如果身份验证失败,通常将响应连同“访问被拒绝”消息一起返回,或重新显示登录窗体。

    发出的身份验证票包括在对 ASP.NET 应用程序的后续请求中。ASP.NET 使用消息身份验证检查 (MAC) 来检查身份验证票的有效性。

  5. 如果用户通过身份验证,ASP.NET 检查身份验证并允许对初始请求的资源的访问、将请求重定向到某个其他页或将请求重定向到自定义授权模块(其中将测试要访问受保护的资源的凭据是否已得到授权)。如果授权失败,则 ASP.NET 将用户重定向到登录页。

    如果用户已被授权,则将允许用户访问受保护资源,或者应用程序会在授权访问受保护资源之前要求额外进行凭据测试,具体取决于应用程序的设计。

    xa68twcb.alert_note(zh-cn,VS.90).gif说明:

    Forms 身份验证和授权检查仅适用于受身份验证授权配置元素保护的资源。使用访问控制列表 (ACL) 对受保护 Windows 资源的访问将与 ASP.NET 应用程序的当前 Windows 标识进行对比检查。有关更多信息,请参见 ASP.NET 模拟

请参见

任务

如何:实现简单的 Forms 身份验证

概念

ASP.NET 模拟

将 IIS 身份验证用于 ASP.NET 模拟

其他资源

使用成员资格管理用户

使用角色管理授权

ASP.NET Web 应用程序安全性

Forms 身份验证提供程序