web-dev-qa-db-fra.com

L'authentification Windows échoue IIS 7.5

Je construis une application interne simple pour mon entreprise, qui requiert une authentification Windows pour la sécurité. Tous les autres modes d'authentification sont désactivés. Je suis coincé dans une situation où Internet Explorer demande 3 fois les informations d'identification, puis échoue avec cette erreur:

Pas autorisé

Erreur HTTP 401. La ressource demandée nécessite une authentification de l'utilisateur.

J'ai ensuite créé un site Web simple pour tester cela. J'ai créé un nouveau site dans IIS, le mets sur son propre port (: 8111, choisi au hasard), un fichier "default.htm" statique, une authentification anonyme désactivée, puis une authentification Windows. Tout le reste a été laissé aux paramètres par défaut. Le numéro de port a été attribué car nous avons plusieurs sites sur cette machine partageant tous la même adresse IP.

Voici quelques scénarios:

  • Navigation depuis le serveur Web lui-même vers http: // localhost : 8111/works Fine

  • Naviguer depuis un autre ordinateur vers http: // ServerIPaddress : 8111 / Fonctionne bien.

  • Navigation depuis un autre ordinateur, vers http: // NomServeur : 8111/FAILS (Demande les informations d’identification 3 fois, puis donne une erreur 401)

J'ai cherché en ligne et j'ai essayé de trouver une solution sans succès jusqu'à présent. Soit je ne l'ai pas trouvé, soit je ne comprends pas assez ce que je lis. Toute aide serait grandement appréciée.

22
Ben Brandt

Je viens de trouver la solution avec l’aide d’un collègue après 2 jours de lutte contre ce problème. Voici ce qu'il a écrit:

Il existe 2 fournisseurs pour l'authentification Windows (Négocier et NTLM) . Lorsque vous définissez l'authentification de site Web sur l'authentification Windows, Alors que Authentification Windows est en surbrillance, cliquez sur Fournisseurs lien dans le volet de droite ou dans le gestionnaire IIS et déplacez NTLM vers le haut. Par La négociation par défaut est en haut, ce qui explique pourquoi vous obtenez un Authentification Invite.

43
Ben Brandt

Erreur 401.1 lorsque vous parcourez un site Web qui utilise l'authentification intégrée.

Solution

Désactiver la vérification en boucle

* In Registry Editor, locate and then click the following registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

* Right-click Lsa, point to New, and then click DWORD Value.
* Type DisableLoopbackCheck, and then press ENTER.
* Right-click DisableLoopbackCheck, and then click Modify.
* In the Value data box, type 1, and then click OK.

http://support.Microsoft.com/kb/896861

17
user926782

Si cela ne fonctionne toujours pas après avoir déplacé NTML en haut de la liste des fournisseurs, essayez de supprimer complètement la négociation, de sorte qu'il ne reste plus que NTML.

Cela a résolu le problème pour moi: déplacer NTML vers le haut ne m'a pas aidé sous Windows Server 2012 et IIS 8.5. J'ai trouvé la solution au problème de stackoverflow suivant: IIS 7.5 Authentification Windows ne fonctionnant pas dans Chrome

5
Thomas T

Je recommande personnellement de NE PAS désactiver la vérification de bouclage globalement sur votre serveur (par exemple, ne PAS définissez DisableLoopbackCheck sur la valeur 1 de votre registre). Ceci est une vulnérabilité de sécurité. Veuillez ne désactiver que pour les hôtes connus.

Voici une fonction Powershell pour vous diriger dans la bonne direction.

function Add-LoopbackFix
{
    param(
        [parameter(Mandatory=$true,position=0)] [string] $siteHostName
    )

    $ErrorActionPreference = "Stop"

    Write-Host "Adding loopback fix for $siteHostName" -NoNewLine

    $str = Get-ItemProperty -Name "BackConnectionHostNames" -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0' -erroraction silentlycontinue

    if ($str) { 
        if($($str.BackConnectionHostNames) -like "*$siteHostName*")
        {
            Write-Host "`tAlready in place" -f Cyan
        } else{
            $str.BackConnectionHostNames += "`n$siteHostName"
            Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" -Name "BackConnectionHostNames" -Value $str.BackConnectionHostNames 
            Write-Host "`tDone" -f Green
        }
    } else {
        New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" -Name "BackConnectionHostNames" -Value $siteHostName -PropertyType "MultiString" 
        Write-Host "`tDone" -f Green
    }

    Write-Host "`tnote: we are not disabling the loopback check all together, we are simply adding $siteHostName to an allowed list." -f DarkGray
}
> Add-LoopbackFix "ServerName"

La source

4
Chase Florell

Cette question a été posée il y a longtemps, mais je sais que de nombreuses personnes se heurtent souvent à elle. Une solution plus appropriée à cela est décrite ici: Authentification en mode noyau . Nous avons mis cela en place il y a plusieurs mois et cela fonctionne bien.

Une autre bonne explication ici: PLUS 2008 ET KERBEROS: AUTHENTIFICATION REFUSÉE, COMPTE DE LA PISCINE APP INNORÉ

Pour postuler sur un site unique:

cd %windir%\system32\inetsrv
set SiteName=TheSiteName
appcmd.exe set config "%SiteName%" -section:system.webServer/security/authentication/windowsAuthentication /useKernelMode:"True" /useAppPoolCredentials:"True" /commit:apphost

Ou à appliquer à tous les sites:

%windir%\system32\inetsrv\appcmd.exe set config -section:windowsAuthentication /useAppPoolCredentials:"True" /commit:apphost
1
mservidio