你目前正处于脱机状态,正在等待 Internet 重新连接

修复: 到 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.VendorParametersSetsOn Error Resume NextSet VendorSet = VendorSets.Item( "{5e302ed5-f5d5-4fad-9b8a-01c72e1569f3}" )If Err.Number <> 0 ThenErr.ClearSet VendorSet = VendorSets.Add( "{5e302ed5-f5d5-4fad-9b8a-01c72e1569f3}" )CheckErrorWScript.Echo "No existing VendorSet."ElseWScript.Echo "Existing VendorSet found. Values in it:"for each name in VendorSet.allNamesWScript.Echo " ", name, "=", VendorSet.Value(name)nextWScript.Echo "-------------------------------------"End IfOn Error GoTo 0On Error Resume NextvalType = "Int" : Val = CInt(argVal)If Err.Number <> 0 ThenErr.ClearvalType = "Boolean" : Val = CBool(argVal)If Err.Number <> 0 ThenErr.ClearvalType = "String" : Val = CStr(argVal)End IfEnd IfWScript.Echo "Setting", argParamName, "=", Val, "(type=" & valType & ")"VendorSet.Value(argParamName) = ValVendorSet.SaveSub CheckError()If Err.Number <> 0 ThenWScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.DescriptionErr.ClearEnd IfEnd Sub
参考
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明

ISA TMG NTLM 委派窗体 FBA 开机自检

警告:本文已自动翻译

属性

文章 ID:2596444 - 上次审阅时间:10/17/2011 19:40:00 - 修订版本: 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
反馈