修正:當 ReturnAuthRequiredIfAuthUserDenied 屬性設為 True,且在 Forefront Threat Management Gateway 2010 環境中,使用者會被「所有使用者」規則拒絕存取時,會被要求驗證

當 TMG) 2010 (Forefront Threat Management Gateway 拒絕Microsoft已驗證使用者的請求時,使用者會收到「502」錯誤訊息,告知使用者被拒絕存取。 此外,使用者不會被要求提供替代憑證。

ReturnAuthRequiredIfAuthUserDenied 屬性可設定為當已驗證的使用者被 TMG 政策拒絕時,會收到「需要 407 代理驗證」訊息。 這讓使用者能夠提供替代的憑證。

欲了解更多關於 ReturnAuthRequiredIfAuthUserDenied 屬性的資訊,請造訪以下 Microsoft 開發者網絡 (MSDN) 網站:

ReturnAuthRequiredIfAuthUserDenied property of the IFPCWebListenerProperties 介面 如果管理員建立一個適用於所有使用者的拒絕規則,並將 ReturnAuthRequiredIfAuthUserDenied 屬性設 為 True,被該規則拒絕的使用者會收到「407 代理驗證需求」訊息。 即使所有用戶都會被此規則拒絕,這種行為仍然存在。 這種行為可能不受歡迎,可能導致不必要的驗證提示。

症狀

這個行為是由於預設的設計所致。 但這種行為可能不是理想的,因為「所有使用者拒絕」規則會封鎖所有使用者。 此外,其他憑證的提示也無法解決這個問題。

原因

為了解決此問題,請安裝以下 Microsoft 知識庫文章中所述的軟體更新:

2517957 Forefront Threat Management Gateway (TMG) 2010 Service Pack 1 軟體更新 1 Rollup 4 套用此軟體更新後,請執行 TMG 陣列成員「更多資訊」區段提供的腳本,將 SkipReauthWhenNonDefaultRule 屬性設 為 True

解決方式

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

狀態

此軟體更新引入了一個新屬性, SkipReauthWhenNonDefaultRule。 此特性提供新的行為。 舉例來說,考慮以下情境。

案例 1

管理員建立一個 All Users 規則,拒絕已認證使用者的存取,而 ReturnAuthRequiredIfAuthUserDenied 屬性則設為 True。 在此情境中,若 SkipReauthWhenNonDefaultRule 屬性設 為 True,使用者會收到「502」錯誤訊息,且不會被提示提供替代憑證。

案例 2

預設規則會被套用,規則會拒絕該請求。 此外, ReturnAuthRequiredIfAuthUserDenied 屬性設定為 True。 在此情境下,使用者會如預期收到「需要 407 代理驗證」的訊息。套用此軟體更新後,請對其中一個 TMG 陣列成員執行以下腳本,將 SkipReauthWhenNonDefaultRule 屬性設 為 TrueSkipReauthWhenNonDefaultRule 屬性的預設設定為 False

注意:這個腳本只有在 ReturnAuthRequiredIfAuthUserDenied 屬性也設為 True 時才會改變行為。

Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"
Const SE_VPS_NAME = "SkipReauthWhenNonDefaultRule"
Const SE_VPS_VALUE = true

Sub SetValue()

' Create the root obect.
Dim root ' The FPCLib.FPC root object
Set root = CreateObject("FPC.Root")

'Declare the other objects needed.
Dim array ' An FPCArray object
Dim VendorSets ' An FPCVendorParametersSets collection
Dim VendorSet ' An FPCVendorParametersSet object

' Get references to the array object
' and the network rules collection.
Set array = root.GetContainingArray
Set VendorSets = array.VendorParametersSets

On Error Resume Next
Set VendorSet = VendorSets.Item( SE_VPS_GUID )

If Err.Number <> 0 Then
Err.Clear

' Add the item
Set VendorSet = VendorSets.Add( SE_VPS_GUID )
CheckError
WScript.Echo "New VendorSet added... " & VendorSet.Name

Else
WScript.Echo "Existing VendorSet found... value- " & VendorSet.Value(SE_VPS_NAME)
End If

if VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE Then

Err.Clear
VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUE

If Err.Number <> 0 Then
CheckError
Else
VendorSets.Save false, true
CheckError

If Err.Number = 0 Then
WScript.Echo "Done with " & SE_VPS_NAME & ", saved!"
End If
End If
Else
WScript.Echo "Done with " & SE_VPS_NAME & ", no change!"
End If

End Sub

Sub CheckError()

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

End Sub

SetValue

注意:要回復預設行為,請依照以下步驟操作:

  1. 請在劇本中找到以下這行:

    Const SE_VPS_VALUE = true
    
  2. 將劇本中的台詞改成以下內容:

    Const SE_VPS_VALUE = false
    
  3. 儲存腳本,並在 TMG 陣列成員中重執行此腳本。

更多資訊

如需有關軟體更新術語的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

824684 描述用於描述Microsoft軟體更新的標準術語

參考資料