修复: 到 web 服务器正在运行 Forefront 威胁管理网关 2010年的 POST 请求可能失败

文章翻译 文章翻译
文章编号: 2596444 - 查看本文应用于的产品
展开全部 | 关闭全部

症状

请考虑以下情形:
  • 您有一个服务器正在运行 Microsoft Forefront 威胁管理网关 (TMG) 2010年。
  • TMG 服务器被配置为 web 服务器。
  • TMG web 侦听器使用基于窗体一起使用 NTLM 委派到已发布的 web 服务器进行身份验证。
  • 有到 TMG 的 web 服务器的 POST 请求。
在此方案中,POST 请求可能会失败。这可能导致各种取决于失败的 POST 请求的类型的应用程序问题。

原因

如果以下情况属实,则会出现此问题:
  • 正在使用 TMG 基于窗体的身份验证。
  • TMG 委派身份验证到已发布的 web 服务器发布规则中配置了 NTLM 委派。
  • ISA 将请求发送到 web 服务器上的已通过身份验证的连接。
  • Web 服务器的响应与 401。
当使用 NTLM 委派时,TMG 对在首次请求该连接上的 web 服务器上的 web 服务器的连接进行身份验证。身份验证然后保存在连接上,以便以后的请求而不必具有重新进行身份验证。

如果请求被发送到 web 服务器上的已通过身份验证的连接,web 服务器会使用意外 401 身份验证请求进行响应。发生此问题可以由 web 服务器上,不同的应用程序池提供服务的请求时因为 IIS 将跨应用程序池不存在身份验证。

当使用基于窗体的身份验证时,TMG 将处理意外 401 请求,通过将用户重定向到最初请求的资源,并通过将 AuthResend 标记添加到 URL。当客户端发出第二个请求时,TMG 确定请求由 AuthResend 标记需要重新进行身份验证,然后删除 AuthResend 标签之前将请求发送到 web 服务器。

但是,重定向不包括 HTTP 方法,并且客户端将在重定向之后进行 GET 请求。因此,POST 请求和开机自检正文不发送到 web 服务器。

工具 (如 Strace、 HTTPWatch 或 Fiddler 可以用于在客户端上确定 TMG 是否发送 POST 请求的响应中具有 AuthResend 标记的重定向。例如,重定向请求的 URL http://domain/test.asp 将类似于以下: http://domain/test.asp&authResendNNN

因为从 URL 将删除该标记,该 URL 发送到 web 服务器,并因此也不会记录之前,TMG web 代理日志不会显示 AuthResend 标记。

GET 请求,也可能出现此行为。但是,该行为不会导致问题,因为重定向将重新提交作为 GET 请求,并且这不会导致同样的问题。

解决方案

还有一种内部设置,可以设置一个发布规则告诉 TMG 自动重试非 GET 请求。这样可以避免意外的 401 请求,从 web 服务器。

默认情况下在 TMG Service Pack 2 中启用此设置是在 web 发布的规则上的 web 侦听器具有基于窗体的身份验证,并且使用 NTLM 委派的。

要解决此问题,请安装以下 Microsoft 知识库文章中的描述该 service pack:
2555840 Microsoft Forefront 威胁管理网关 2010年的 Service Pack 2 的说明

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的一个问题。

更多信息

要解决此问题,ISA 2006 或上 TMG 不 Service Pack 2 的情况下,以下脚本可用于内部参数设置指定的 web 发布规则上。默认情况下,这是使 TMG Service Pack 2 的设置。

要使用该脚本,请将其复制到记事本中,然后将其保存为.vbs 文件上的一个阵列成员。

编辑以下行在脚本中,替换 ReplaceRuleNameHere 具有相关的 web 发布规则的名称:
argRuleName = "ReplaceRuleNameHere"
一个数组中的阵列成员上,然后运行以下脚本:
argRuleName = "ReplaceRuleNameHere"
argParamName = "SendLogonOn401"
argVal = "true"

Set rule = CreateObject("FPC.Root").GetContainingArray.ArrayPolicy.PolicyRules.Item(argRuleName)
Set VendorSets = rule.VendorParametersSets

On Error Resume Next
Set VendorSet = VendorSets.Item( "{5e302ed5-f5d5-4fad-9b8a-01c72e1569f3}" )
If Err.Number <> 0 Then
Err.Clear
Set VendorSet = VendorSets.Add( "{5e302ed5-f5d5-4fad-9b8a-01c72e1569f3}" )
CheckError
WScript.Echo "No existing VendorSet."
Else
WScript.Echo "Existing VendorSet found. Values in it:"
for each name in VendorSet.allNames
WScript.Echo " ", name, "=", VendorSet.Value(name)
next
WScript.Echo "-------------------------------------"
End If

On Error GoTo 0

On Error Resume Next
valType = "Int" : Val = CInt(argVal)
If Err.Number <> 0 Then
Err.Clear
valType = "Boolean" : Val = CBool(argVal)
If Err.Number <> 0 Then
Err.Clear
valType = "String" : Val = CStr(argVal)
End If
End If

WScript.Echo "Setting", argParamName, "=", Val, "(type=" & valType & ")"
VendorSet.Value(argParamName) = Val

VendorSet.Save

Sub CheckError()
If Err.Number <> 0 Then
WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description
Err.Clear
End If
End Sub

参考

有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明

属性

文章编号: 2596444 - 最后修改: 2011年10月17日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Forefront Threat Management Gateway 2010 Enterprise
  • Microsoft Forefront Threat Management Gateway 2010 Standard
  • Microsoft Forefront Threat Management Gateway 2010 Service Pack 1
关键字:?
kbfix kbbug kbexpertiseinter kbsurveynew kbmt KB2596444 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 2596444
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com