ASP.NET 安全数据流
更新:2007 年 11 月
可以通过多种方法来设计 ASP.NET 应用程序的安全性。本主题描述两种常用方案的安全数据流:模拟和使用 Cookie 的 Forms 身份验证。
方案 1:模拟
模拟方案依赖于 Microsoft Internet 信息服务 (IIS) 身份验证和 Microsoft Windows 文件访问安全性以最大限度地减少 ASP.NET 应用程序本身在安全性方面的编程量。数据流如下图所示。
模拟
该图说明下列事件序列:
来自网络客户端的请求进入 IIS。
IIS 使用基本、简要或 Windows 集成的安全(NTLM 或 Kerberos)对客户端进行身份验证。
如果客户端通过身份验证,则 IIS 将已通过身份验证的请求传递给 ASP.NET。
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 帐户)。
说明: 如果未启用模拟并要限制对特定用户或用户组的访问(如使用 Forms 身份验证进行验证的用户),则必须使用某些其他授权方式(如 URL 授权)。有关 URL 授权的更多信息,请参见 ASP.NET 授权。
有关在 ASP.NET 应用程序中使用模拟的详细信息,请参见 ASP.NET 模拟和将 IIS 身份验证用于 ASP.NET 模拟。
如果允许访问,则 ASP.NET 应用程序通过 IIS 返回请求的资源。
方案 2 - Forms 身份验证
在 Forms 身份验证方案中,应用程序直接从用户那里收集名字和密码等凭据,并自己判断这些信息的真实性。应用程序不使用 IIS 身份验证,但 IIS 身份验证设置可以影响 Forms 身份验证。作为一项原则,当您使用 Forms 身份验证时,请在 IIS 中启用匿名访问。否则,如果用户未通过 IIS 身份验证,他们甚至无法访问应用程序以便向 Forms 身份验证提供用户名和密码。
此方案中的数据流如下图所示。
Forms 身份验证
此图说明下面的事件序列:
用户生成对受保护资源的请求。
IIS 接收请求,并且由于已启用 IIS 匿名访问,IIS 不执行任何用户身份验证,而将请求传递给 ASP.NET 应用程序。
由于 ASP.NET 身份验证模式设置为 Forms,ASP.NET 应用程序将检查 Forms 身份验证票的请求(特定 Cookie)。如果没有连接到请求的身份验证票,则 ASP.NET 将请求重定向到应用程序的配置文件中指定的登录页。
用户在登录页上输入所需凭据(通常为用户名和密码)。应用程序代码检查凭据以确认它们的真实性。如果凭据通过身份验证,应用程序代码将身份验证票连接到表示用户凭据的响应。(不包括密码)。如果身份验证失败,通常将响应连同“访问被拒绝”消息一起返回,或重新显示登录窗体。
发出的身份验证票包括在对 ASP.NET 应用程序的后续请求中。ASP.NET 使用消息身份验证检查 (MAC) 来检查身份验证票的有效性。
如果用户通过身份验证,ASP.NET 检查身份验证并允许对初始请求的资源的访问、将请求重定向到某个其他页或将请求重定向到自定义授权模块(其中将测试要访问受保护的资源的凭据是否已得到授权)。如果授权失败,则 ASP.NET 将用户重定向到登录页。
如果用户已被授权,则将允许用户访问受保护资源,或者应用程序会在授权访问受保护资源之前要求额外进行凭据测试,具体取决于应用程序的设计。
说明: Forms 身份验证和授权检查仅适用于受身份验证和授权配置元素保护的资源。使用访问控制列表 (ACL) 对受保护 Windows 资源的访问将与 ASP.NET 应用程序的当前 Windows 标识进行对比检查。有关更多信息,请参见 ASP.NET 模拟。