本文逐步介绍了如何配置委派 ASP.NET 应用程序所需的 Internet 信息服务 (IIS) 和 Microsoft Active Directory。委派是模拟之后的下一个步骤。委派支持代表客户端访问远程资源(而不是只访问本地资源)的能力。本文描述了委派连接了 ASP.NET 的应用程序所必须采取的步骤。
委派要求
委派依靠集成 Windows 身份验证来访问资源。对于可以委派帐户的计算机的数量没有限制,但您必须正确地配置每台计算机。集成 Windows 身份验证方法仅当满足以下两个条件时才有效:
- 将网络设置为使用需要 Active Directory 的 Kerberos 身份验证协议。
- 将网络上的计算机和帐户设置为可委派其他帐户。
如果这些条件不为真,您将无法使用集成 Windows 身份验证访问远程资源上的数据,这是因为集成 Windows 身份验证仅允许您访问 IIS 服务器,而不能访问为 Windows 身份验证配置的、IIS 服务器远程访问的其他资源。
Kerberos 身份验证对服务器和客户端进行验证,而 Windows NT 挑战/响应 (NTLM) 仅验证客户端。Windows 2000 之前的平台不支持 Kerberos 身份验证。Kerberos 要求您使用 IIS 5.0 或更高版本。因此,您必须在所有使用 Kerberos 委派的计算机上运行 Windows 2000 或更新的操作系统。此外,您必须将所有计算机置入同一个 Active Directory 林中。仅 Microsoft Internet Explorer 5.0 或更高版本支持 Kerberos。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
217098
(http://support.microsoft.com/kb/217098/EN-US/
)
Basic Overview of Kerberos User Authentication Protocol in Windows 2000
满足委派的所有要求后,按如下顺序委派请求者凭据:
- 客户端(Internet Explorer 5.0 或更高版本)。
- 来自域用户的请求。
- Web Server(IIS 5.0 或更高版本)。
- 域用户凭据的委派。
- 域用户凭据的业务服务器委派。
- 访问远程资源(如文件、数据库、Active Directory 及其他资源)。
为委派配置 Internet Explorer
使用 Internet Explorer 5.0 或更高版本时,可以按照以下说明为 ASP.NET - IIS 委派配置 Internet Explorer:
- 启动 Internet Explorer。在菜单栏上,单击“工具”,然后单击“Internet 选项”。
- 单击“高级”选项卡,然后单击以选中“启用集成 Windows 身份验证(需要重新启动)”复选框。
此设置允许 Internet Explorer 响应协商挑战然后执行 Kerberos 身份验证。由于此功能要求使用 Windows 2000 或更高版本,因此当 Internet Explorer 不是运行在 Windows 2000 或更高版本的操作系统上时,Internet Explorer 不会响应协商挑战。默认情况下,Internet Explorer 使用 NTLM 身份验证,即使您单击选中了“启用集成 Windows 身份验证(需要重新启动)”复选框。
警告:注册表编辑器使用不当可造成严重问题,这些问题可能需要重新安装操作系统。Microsoft 不保证能够解决因为注册表编辑器使用不当而产生的问题。使用注册表编辑器需要您自担风险。
注意:管理员可以将以下注册表项中的 EnableNegotiate :REG_DWORD 值设置为 1,以打开集成 Windows 身份验证:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet
Settings
. - 某些情况下会发生问题,Kerberos 可能会在 Internet Explorer 客户端上失败。
有关与 Kerberos 身份验证有关的问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
321728
(http://support.microsoft.com/kb/321728/EN-US/
)
Internet Explorer Does Not Support Kerberos Authentication With Proxy Servers
325608
(http://support.microsoft.com/kb/325608/EN-US/
)
PRB:Authentication Delegation Through Kerberos Does Not Work in Load-Balanced Architectures
248350
(http://support.microsoft.com/kb/248350/EN-US/
)
Kerberos Authentication Fails after Upgrading from IIS 4.0 to IIS 5.0
264921
(http://support.microsoft.com/kb/264921/EN-US/
)
INFO:How IIS Authenticates Browser Clients
为委派配置 IIS
要为连接了 ASP.NET 的应用程序打开集成 Windows 身份验证和模拟,您需要配置 Internet 信息服务 (IIS)。要在 IIS 中配置 Windows 身份验证,请执行下列步骤:
- 单击“开始”,然后单击“运行”。在“打开”文本框中,键入 inetmgr,然后单击“确定”。
- 展开“本地计算机”,然后展开“Web 站点”。
- 右键单击“默认 Web 站点”,然后单击“属性”。
- 单击“目录安全性”选项卡,然后单击“匿名访问和验证控件”下面的“编辑”。
- 单击以选中“集成 Windows 身份验证”复选框,单击清除“匿名访问”、“Windows 域服务器的摘要式验证”和“基本身份验证”复选框。
注意:如果 Internet Explorer 可以从多个身份验证方案中进行选择,它将始终选择第一个身份验证方案。例如,如果打开了匿名身份验证并且它列在 Windows 身份验证之前,则 Internet Explorer 将尝试进行匿名身份验证。如果 Internet Explorer 不能自动进行身份验证,Internet Explorer 将选择下一个身份验证方法,然后尝试使用 Windows 身份验证进行验证。
为委派配置 ASP.NET
- 在文本编辑器(如 Microsoft 记事本)中打开 Web.config 文件。Web.config 文件位于 Web 应用程序目录中。
- 在 Web.config 文件中,在 <configuration> 节中找到以下信息:
<allow users="*" />
<deny users="?" />
- 在 <System.web> 节中,验证身份验证元素被设置为“Windows”,如下所示:
<authentication mode="Windows" />
- 在 <System.web> 节中,添加用于模拟的以下元素:
<identity impersonate="true" />
注意:在线程上模拟特定用户的进程的标识必须具有“充当操作系统的一部分”管理凭据。默认情况下,Aspnet_wp.exe 进程在名为 ASPNET 的计算机帐户下运行。不过,此帐户没有模拟特定用户所需的管理凭据。如果服务是作为 LocalSystem 运行,则不得执行此步骤,原因是该帐户自动支持模拟功能。在 Windows Server 2003 中,不再有此要求。 -
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
306158
(http://support.microsoft.com/kb/306158/EN-US/
)
INFO:Implementing Impersonation in an ASP.NET Application
317012
(http://support.microsoft.com/kb/317012/EN-US/
)
INFO:Process and Request Identity in ASP.NET
315736
(http://support.microsoft.com/kb/315736/EN-US/
)
HOW TO:Secure an ASP.NET Application by Using Windows Security
为委派配置 Active Directory
对于所有参加 Kerberos 委派的计算机,都必须启用委派,这可以使用 Active Directory 工具进行配置。
为委派配置计算机
要将计算机配置为可以委派其他帐户,请执行下列步骤:
- 在任务栏上,单击“开始”,指向“设置”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Active Directory 用户和计算机”。
- 单击“计算机”。在右窗格中,右键单击要配置的计算机,然后单击“属性”。
- 在“常规”选项卡上,单击以选中“信任计算机作为委派”复选框。
- 单击“确定”。
为委派配置用户
默认情况下,所有 ASP.NET 应用程序都在 aspnet_wp.exe 进程中运行。Aspnet_wp.exe 进程在名为 ASPNET 的计算机帐户下运行。要验证应用程序帐户可以充当代理,请执行下列步骤:
- 在任务栏上,单击“开始”,指向“设置”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Active Directory 用户和计算机”。
- 单击用户。在右窗格中,右键单击要为委派进行配置的用户的名称,然后单击“属性”。
- 单击“帐户”选项卡。在“帐户”下,找到并单击选中“帐户可委派其他帐户”复选框。
注意:如果服务作为 LocalSystem 运行,请不要执行此步骤,原因是该帐户自动支持可委派其他帐户设置。默认情况下,将 ASP.NET 作为 LocalSystem(Machine.config 文件的 <processModel> 元素节中 userName = SYSTEM)运行时,您是以可以委派其他帐户方式运行的。
注意:标记为“敏感帐户,不能被委派”的帐户不能参与委派。要验证帐户是否具有以上标记,请在“帐户选项”列表中找到“敏感帐户,不能被委派”。确保没有选中该选项。 - 单击“确定”。
疑难解答
- 如果 URL 中用于调用 ASP.NET 页的 Web 服务器名称不是 IIS 计算机的 NetBIOS 名称,则集成身份验证可能会因错误 401.3 而失败。要解决此问题,请使用 SetSPN.exe 实用工具为该计算机注册一个新的服务主要名称。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
294382
(http://support.microsoft.com/kb/294382/EN-US/
)
Authentication May Fail with "401.3" Error If Web Site's "Host Header" Differs from Server's NetBIOS Name
- Kerberos 不能在负载平衡的体系结构中运行,并且 IIS 返回到 NTLM 身份验证。由于不能使用 NTLM 进行委派,因此任何需要委派的应用程序和服务都无法正常工作。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
325608
(http://support.microsoft.com/kb/325608/EN-US/
)
PRB:Authentication Delegation Through Kerberos Does Not Work in Load-Balanced Architectures
- 要使 Kerberos 正常工作,必须对所有通讯都使用完全限定域名 (FQDN)。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
326089
(http://support.microsoft.com/kb/326089/EN-US/
)
HOW TO:Enable Kerberos on a Non-Domain Controller for IIS Web Applications
- 当您在 Windows 2000 客户端上使用 Internet Explorer,然后定位到主机标题名与计算机的 NetBIOS 名称不同的 Web 站点时,集成身份验证可能会因错误 401.3 而失败。请注意,使用 Windows NT 4、Windows 98 或 Windows 95 的 Internet Explorer 客户端不会失败。此外,其他身份验证方案都能够正常工作。
- 如果 Web 服务器使用完全限定域名,则必须将该站点添加到 Internet Explorer 的 Intranet 站点列表中。要验证 Web 服务器使用的是完全限定域名,请执行下列步骤:
- 打开 Internet Explorer。在“工具”菜单上,单击“Internet 选项”,然后单击“安全”选项卡。
- 单击以选择“本地 Intranet”。单击“站点”。
- 单击“高级”,然后在将该网站添加到区域中对话框中键入 Web 地址。单击“添加”,然后单击“确定”。
- 如果 Internet Explorer 客户端被设置为使用代理服务器,则必须选中“对于本地地址不使用代理服务器”复选框。要验证 Internet Explorer 客户端被设置为使用代理服务器,请执行下列步骤:
- 启动 Internet Explorer。在“工具”菜单上,单击“Internet 选项”,然后单击“连接”选项卡。
- 单击“局域网设置”。在代理服务器下,验证是否选中了“对于本地地址不使用代理服务器”复选框。
- 如果要从连接了 ASP.NET 的应用程序访问 SQL 服务器,必须使用 TCP/IP。命名管道不支持 Kerberos 委派。命名管道仅使用 NTLM。为此,请向连接字符串中添加以下属性:
"Network Library =dbmssocn"
如果您不显式地设置网络库,NTLM 将采用客户端配置实用工具 (Cliconfg.exe) 中的第一个库设置。在 Microsoft Data Access Components (MDAC) 2.6 中,此默认设置从命名管道更改为 TCP/IP。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 315159
(http://support.microsoft.com/kb/315159/EN-US/
)
BUG:Named Pipes Do Not Work When Worker Process Runs Under ASPNET Account
176377
(http://support.microsoft.com/kb/176377/EN-US/
)
INFO:Accessing SQL Server with Integrated Security from ASP
176379
(http://support.microsoft.com/kb/176379/EN-US/
)
INFO:Accessing SQL Server with Integrated Security from ASP
247931
(http://support.microsoft.com/kb/247931/EN-US/
)
INF:Authentication Methods for Connections to SQL Server in Active Server Pages
有关如何设计安全的、基于 Web 的应用程序和委派方案的详细信息,请访问以下 Microsoft Developer Network Web 站点:
生成安全的 ASP.NET 应用程序:身份验证、授权和安全通讯
有关如何设计安全的、基于 Web 的应用程序的详细信息,请参阅下列内容:
《Designing Secure Web-Based Applications》(设计安全的基于 Web 的应用程序)
Microsoft Press
Michael Howard、Marc Levy 和 Richard Waymire 著
ISBN 0-7356-0995-0
文章编号: 810572 - 最后修改: 2007年12月4日 - 修订: 2.5
这篇文章中的信息适用于:
- Microsoft ASP.NET 1.1
- Microsoft ASP.NET 1.0
- Microsoft Internet Information Services 5.0
- Microsoft Internet Information Services 6.0
| kbauthentication kbwebforms kbdomain kbclient kbconfig kbwebserver kbhowtomaster kbhowto KB810572 |
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。