OPRAVA: Požadavky POST na webový server se systémem Forefront Threat Management brány 2010 může selhat.

Platí pro: Forefront Threat Management Gateway 2010 EnterpriseForefront Threat Management Gateway 2010 Standard

Příznaky


Jde o takovouto situaci:
  • Máte serveru se systémem Microsoft Forefront Threat Management brány (TMG) 2010.
  • TMG server je konfigurován jako webový server.
  • Služba naslouchání na webu TMG používá ověřování pomocí formulářů s delegování ověřování NTLM na publikovaný webový server.
  • Existují požadavky POST na webový server TMG.
V tomto scénáři může dojít k selhání požadavků POST. To může způsobit různé problémy aplikací, které závisí na druhu požadavky POST, které selžou.

Příčina


K tomuto problému dochází, pokud jsou splněny následující podmínky:
  • Používá ověřování na základě formulářů TMG.
  • V publikování pravidlo TMG delegování ověření na publikovaný webový server je nakonfigurován delegování ověřování NTLM.
  • ISA odešle požadavek na webový server již ověřených připojení.
  • Webový server odpoví 401.
Při delegování ověřování NTLM TMG ověřuje připojení k webovému serveru při prvním požadavku na webový server připojení. Ověřování je pak trvalá připojení, takže není nutné mít opakované vyšší požadavky.

V případě, že je požadavek odeslán na webový server již ověřené připojení, webový server odpoví neočekávaný požadavek ověření 401. Tento problém může nastat při žádosti jsou obsluhovány samostatných fondů aplikací na webovém serveru služby IIS ověřování nebudou přetrvávat v fondy aplikací.

Při použití ověřování na základě formulářů TMG bude zpracovávat neočekávaný požadavek 401, přesměrování uživatele zpět do původně vyžádaného prostředku a přidáním značky AuthResend na adresu URL. Když klient provede druhou žádost, TMG Určuje, že požadavek vyžaduje opakované ověření podle značky AuthResend a pak odebere značku AuthResend před odesláním požadavku na webový server.

Ale přesměrování neobsahuje metodu HTTP a klient provede po přesměrování požadavku GET. Proto požadavek POST a tělo POST nejsou odeslány na webový server.

Nástroj jako Strace, HTTPWatch nebo Fiddler lze použít v klientském počítači Chcete-li zjistit, zda je TMG odesílání přesměrování, které mají značku AuthResend v reakci na požadavky POST. Přesměrování požadavku na adresu URL http://domain/test.asp by například vypadat takto: http://domain/test.asp&authResendNNN

Protokoly TMG webového proxy nezobrazují značky AuthResend vzhledem k tomu, že značka je odebrána z adresy URL před ADRESU je odeslán na webový server a není proto také zaznamenána.

Toto chování může také zobrazit požadavky GET. Chování však nezpůsobí problém, protože přesměrování, budou znovu podrobeny jako požadavek GET a nezpůsobí stejný problém.

Řešení


Je vnitřní nastavení, která lze nastavit na publikování pravidlo TMG pro automaticky byli opakovaně ověřováni non-GET požadavky sdělit. Tím je zabráněno neočekávanou 401 požadavky z webového serveru.

Ve výchozím nastavení v TMG Service Pack 2 je toto nastavení povoleno na web publikování pravidla, které mají ověřování na základě formulářů na služba naslouchání na webu a které používají delegování ověřování NTLM.

Chcete-li vyřešit tento problém, nainstalujte aktualizaci service pack, která je popsána v následujícím článku znalostní báze Microsoft Knowledge Base:
Popis 2555840 aktualizace Service Pack 2 pro Microsoft Forefront Threat Management brány 2010

Stav


Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".

Další informace


ISA 2006 nebo TMG bez Service Pack 2 Tento problém vyřešit, můžete použít následující skript k vnitřní parametr nastavit na zadaný web publikování pravidlo. Výchozí je nastavení umožňující TMG Service Pack 2.

Chcete-li tento skript použít, zkopírujte do programu Poznámkový blok a uložte jej jako soubor vbs na jednom z členů pole.

Upravte následující řádek ve skriptu ReplaceRuleNameHere nahraďte název pravidla pro publikování na web relevantní:
argRuleName = "ReplaceRuleNameHere"
Na jednom z členů pole v poli, spusťte následující skript:
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

Odkazy


Pro další informace o terminologii používané v aktualizacích softwaru, klepněte na následující číslo článku k zobrazení článku v databázi Microsoft Knowledge Base:
824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft