Mensaje de error cuando un usuario accede a un sitio Web de SharePoint que se publica en ISA Server 2006 o en Windows Essential Business Server 2008: "HTTP 401 No autorizado"


Síntomas


Cuando un usuario accede a un sitio Web de SharePoint que se publica en Microsoft Internet Security and Acceleration (ISA) Server 2006, ISA Server 2006 SP1 o en Windows Essential Business Server 2008, el usuario puede recibir uno de los siguientes mensajes de error: Mensaje de error1: Mensaje de error 1
HTTP 401 No autorizado
Mensaje de error 2
HTTP 500 El servidor denegó el Localizador uniforme de recursos (URL) especificado. Póngase en contacto con el administrador del servidor.
Este problema tiene lugar cuando las siguientes condiciones son verdaderas:
  • En el agente de escucha web que usa la regla de publicación web de SharePoint, se configura la autenticación de formularios HTML.
  • El cliente web envía una solicitud POST al sitio web de SharePoint.
  • La dirección URL de la solicitud POST contiene caracteres extendidos. Por ejemplo, la dirección URL contiene é, .

Causa


Este problema se produce porque ISA Server o Windows Essential Business Server 2008 no pueden analizar una dirección URL que contenga caracteres extendidos. En este caso, ISA Server o Windows Essential Business Server 2008 rechaza la solicitud POST que envía el cliente.

Solución


Para resolver este problema, siga estos pasos:
  1. Aplique la revisión que se describe en el artículo 940250 de Microsoft Knowledge Base. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    940250 Descripción del paquete de revisiones de ISA Server 2006: 16 de julio de 2007
  2. Copie el siguiente script en el Bloc de notas:Nota: Para resolver este problema en ISA Server 2006, utilice el siguiente script. No es necesario aplicar la revisión de este artículo para ISA Server 2006 SP1, pero debe usar el script.
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "CookieFilterDecodeUEncoding"Const SE_VPS_VALUE = trueSub SetValue()    ' Create the root object.    Dim root  ' The FPCLib.FPC root object    Set root = CreateObject("FPC.Root")    'Declare the other objects that are needed.    Dim array       ' An FPCArray object    Dim VendorSets  ' An FPCVendorParametersSets collection    Dim VendorSet   ' An FPCVendorParametersSet object    ' Get references to the array object    ' and to 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 IfEnd SubSub CheckError()    If Err.Number <> 0 Then        WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description        Err.Clear    End IfEnd SubSetValue
  3. Guarde el archivo como un archivo de script de Microsoft Visual Basic mediante la extensión de nombre de archivo .vbs. Por ejemplo, guarde el archivo con el siguiente nombre:
    EnableKB940248.vbs
  4. En un símbolo del sistema, vaya a la ubicación donde guardó el archivo EnableKB940248.vbs.
  5. Ejecute el siguiente comando:
    cscript EnableKB940248.vbs
Nota Después de seguir estos pasos, solo la parte de consulta de la dirección URL puede contener caracteres extendidos. El elemento de consulta sigue el signo de interrogación (?) en la dirección URL. La parte que aparece antes del signo de interrogación en la dirección URL no puede contener caracteres extendidos incluso después de usar esta resolución. Si desea quitar los cambios realizados al ejecutar el script en el paso 5, ejecute el siguiente script:
Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "CookieFilterDecodeUEncoding"Const SE_VPS_VALUE = FalseSub SetValue()' Create the root object.Dim root ' The FPCLib.FPC root objectroot = CreateObject("FPC.Root")'Declare the other objects that are needed.Dim array ' An FPCArray objectDim VendorSets ' An FPCVendorParametersSets collectionDim VendorSet ' An FPCVendorParametersSet object' Get references to the array object' and to the network rules collection.array = root.GetContainingArrayVendorSets = array.VendorParametersSetsOn Error Resume NextVendorSet = VendorSets.Item(SE_VPS_GUID)If Err.Number <> 0 ThenErr.Clear()' Add the itemVendorSet = VendorSets.Add(SE_VPS_GUID)CheckError()WScript.Echo("New VendorSet added... " & VendorSet.Name)ElseWScript.Echo("Existing VendorSet found... value- " & VendorSet.Value(SE_VPS_NAME))End IfIf VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE ThenErr.Clear()VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUEIf Err.Number <> 0 ThenCheckError()ElseVendorSets.Save(False, True)CheckError()If Err.Number = 0 ThenWScript.Echo("Done with " & SE_VPS_NAME & ", saved!")End IfEnd IfElseWScript.Echo("Done with " & SE_VPS_NAME & ", no change!")End IfEnd SubSub CheckError()If Err.Number <> 0 ThenWScript.Echo("An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description)Err.Clear()End IfEnd SubSetValue Change to:[INSERT CORRECTION]Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "CookieFilterDecodeUEncoding"Const SE_VPS_VALUE = falseSub SetValue()' Create the root object.Dim root ' The FPCLib.FPC root objectSet root = CreateObject("FPC.Root")'Declare the other objects that are needed.Dim array ' An FPCArray objectDim VendorSets ' An FPCVendorParametersSets collectionDim VendorSet ' An FPCVendorParametersSet object' Get references to the array object' and to the network rules collection.Set array = root.GetContainingArraySet VendorSets = array.VendorParametersSetsOn Error Resume NextSet VendorSet = VendorSets.Item( SE_VPS_GUID )If Err.Number <> 0 ThenErr.Clear' Add the itemSet VendorSet = VendorSets.Add( SE_VPS_GUID )CheckErrorWScript.Echo "New VendorSet added... " & VendorSet.NameElseWScript.Echo "Existing VendorSet found... value- " & VendorSet.Value(SE_VPS_NAME)End Ifif VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE ThenErr.ClearVendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUEIf Err.Number <> 0 ThenCheckErrorElseVendorSets.Save false, trueCheckErrorIf Err.Number = 0 ThenWScript.Echo "Done with " & SE_VPS_NAME & ", saved!"End IfEnd IfElseWScript.Echo "Done with " & SE_VPS_NAME & ", no change!"End IfEnd SubSub CheckError()If Err.Number <> 0 ThenWScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.DescriptionErr.ClearEnd IfEnd SubSetValue

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".