it-swarm.com.de

Windows-Authentifizierung schlägt fehl IIS 7.5

Ich baue eine einfache interne Anwendung für mein Unternehmen auf, für deren Sicherheit die Windows-Authentifizierung erforderlich ist. Alle anderen Authentifizierungsmodi sind deaktiviert. Ich stecke in einer Situation fest, in der Internet Explorer dreimal zur Eingabe von Anmeldeinformationen auffordert. Anschließend schlägt dieser Fehler fehl:

Nicht berechtigt

HTTP-Fehler 401. Für die angeforderte Ressource ist eine Benutzerauthentifizierung erforderlich.

Ich habe dann eine nackte Knochen-Website erstellt, um dies zu testen. Ich habe eine neue Site in IIS erstellt, sie auf einen eigenen Port (: 8111, zufällig ausgewählt) gesetzt, eine statische "default.htm" -Datei eingefügt, die anonyme Authentifizierung deaktiviert und die Windows-Authentifizierung aktiviert. Alles andere wurde auf den Standardeinstellungen belassen. Die Portnummer wurde zugewiesen, da sich auf diesem Computer mehrere Standorte befinden, die alle dieselbe IP-Adresse verwenden.

Hier sind einige Szenarien:

  • Browsen Sie vom Webserver selbst nach http: // localhost : 8111/works Fine

  • Durchsuchen von einem anderen Computer unter http: // ServerIPaddress : 8111 / Funktioniert einwandfrei

  • Durchsuchen von einem anderen Computer nach http: // ServerName : 8111/FAILS (Fragt dreimal nach Anmeldeinformationen, dann 401-Fehler)

Ich habe online gesucht und versucht, bisher ohne Erfolg eine Lösung zu finden. Entweder habe ich es nicht gefunden oder ich verstehe nicht gut, was ich lese. Jede Hilfe wäre sehr dankbar.

22
Ben Brandt

Ich habe die Lösung mit Hilfe eines Kollegen nach zwei Tagen des Kämpfens mit diesem Problem ausgearbeitet. Folgendes hat er geschrieben:

Es gibt 2 Anbieter für die Windows-Authentifizierung (Negotiate und NTLM) . Wenn Sie die Website-Authentifizierung auf Windows-Authentifizierung einstellen, wird Klicken Sie, während die Windows-Authentifizierung hervorgehoben ist, auf die Anbieter Link im rechten Bereich oder IIS Manager und verschieben Sie NTLM nach oben. Durch default Negotiate ist an der Spitze, weshalb Sie eine .__ erhalten. Authentifizierungsabfrage.

43
Ben Brandt

Fehler 401.1 beim Durchsuchen einer Website, die die integrierte Authentifizierung verwendet.

Lösung

Deaktivieren Sie die Loopback-Prüfung

* 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

Wenn es nach dem Verschieben von NTML an die Spitze der Liste immer noch nicht funktioniert, versuchen Sie Negotiate vollständig zu entfernen, so dass nur noch NTML übrig ist.

Das hat es für mich behoben - NTML nach oben zu bringen, half nicht auf Windows Server 2012 und IIS 8.5. Ich habe die Lösung in dem folgenden Stackoverflow-Problem gefunden: IIS 7.5 Windows-Authentifizierung funktioniert nicht in Chrome

5
Thomas T

Ich persönlich empfehle, die Loopbackcheck NICHT global auf Ihrem Server zu deaktivieren (IE: Do NICHTDisableLoopbackCheck auf den Wert 1 in Ihrer Registrierung setzen. Dies ist eine Sicherheitsanfälligkeit. Bitte nur für bekannte Hosts deaktivieren.

Hier ist eine Powershell-Funktion, um Sie in die richtige Richtung zu weisen.

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"

Quelle

4
Chase Florell

Es ist schon eine Weile her, seit diese Frage gestellt wurde, aber ich weiß, dass zahlreiche Leute oft darauf stoßen. Eine bessere Lösung für dieses Problem wird hier beschrieben: Authentifizierung im Kernelmodus . Wir haben dies vor einigen Monaten implementiert und es funktioniert gut.

Eine weitere gute Erklärung hier: MORE 2008 UND KERBEROS: AUTHENTICATION DENied, APP POOL-KONTO WIRD INGNORIERT

Um sich für eine einzelne Site zu bewerben:

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

Oder um sich auf allen Seiten zu bewerben:

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