Message d'erreur lorsqu'un utilisateur accède à un site Web SharePoint qui est publié dans ISA Server 2006 ou dans Windows Essential Business Server 2008: "HTTP 401 Non autorisé"


Symptômes


Lorsqu'un utilisateur accède à un site Web SharePoint qui est publié dans Microsoft Internet Security and Acceleration (ISA) Server 2006, ISA Server 2006 SP1 ou dans Windows Essential Business Server 2008, l'utilisateur peut recevoir l'un des messages d'erreur suivants : Message d'erreur1
HTTP 401 Non autorisé
Message d’erreur 2
HTTP 500 Le serveur a refusé le localisateur de ressources uniforme spécifié (URL). Contactez l'administrateur du serveur.
Ce problème se produit si les conditions suivantes sont présentes :
  • Dans l'auditeur Web que la règle de publication Web SharePoint utilise, l'authentification html de formulaire est configurée.
  • Le client Web envoie une demande POST au site Web SharePoint.
  • L'URL de la demande POST contient des caractères étendus. Par exemple, l'URL contient é, à, ou è.

Cause


Ce problème se produit parce que ISA Server ou Windows Essential Business Server 2008 ne peut pas analyser une URL qui contient des caractères étendus. Dans ce cas, ISA Server ou Windows Essential Business Server 2008 rejette la demande POST que le client envoie.

Résolution


Pour résoudre ce problème, suivez les étapes suivantes :
  1. Appliquez le hotfix qui est décrit dans microsoft Knowledge Base article 940250. Pour plus d'informations, cliquez sur le numéro d'article suivant pour voir l'article dans la base de connaissances Microsoft :
    940250 Description du paquet de hotfixing ISA Server 2006 : 16 juillet 2007
  2. Copiez le script suivant dans Notepad:Note Pour résoudre ce problème dans ISA Server 2006, utilisez le script suivant. Vous n'avez pas à appliquer le hotfix dans cet article pour ISA Server 2006 SP1, mais vous devez utiliser le 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. Enregistrez le fichier en tant que fichier de script Microsoft Visual Basic en utilisant l'extension de nom de fichier .vbs. Par exemple, enregistrez le fichier en utilisant le nom suivant :
    EnableKB940248.vbs
  4. Lors d'une invite de commande, déplacez-vous à l'endroit où vous avez enregistré le fichier EnableKB940248.vbs.
  5. Exécutez la commande suivante :
    cscript EnableKB940248.vbs
Remarque Après avoir suivi ces étapes, seule la partie requête de l'URL peut contenir des caractères étendus. La partie requête suit le point d'interrogation (QM) dans l'URL. La partie qui précède le point d'interrogation de l'URL ne peut pas contenir de caractères étendus même après avoir utilisé cette résolution. Si vous souhaitez supprimer les modifications apportées lorsque vous exécutez le script à l'étape 5, exécutez le script suivant :
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

Statut


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.