2012-10-02 13 views
20

Ich baue eine einfache interne Anwendung für meine Firma, und es erfordert Windows-Authentifizierung für die Sicherheit. Alle anderen Authentifizierungsmodi sind deaktiviert. Ich bin fest in einer Situation, in Internet Explorer 3-mal für Anmeldeinformationen aufgefordert wird, schlägt dann mit diesem Fehler:Windows Authentifizierung fehlgeschlagen in IIS 7.5

Not Authorized

HTTP Error 401. The requested resource requires user authentication.

Ich habe dann eine nackten Knochen Website dieses heraus zu testen. Ich habe eine neue Site in IIS erstellt, auf einen eigenen Port (: 8111, zufällig ausgewählt) gesetzt, eine statische Datei "default.htm" eingefügt, die anonyme, deaktivierte Authentifizierung deaktiviert und dann die Windows-Authentifizierung aktiviert. Alles andere wurde bei den Standardeinstellungen belassen. Die Portnummer wurde zugewiesen, da auf diesem Computer mehrere Standorte mit derselben IP-Adresse vorhanden sind.

Hier sind ein paar Szenarien:

  • Browsing vom Web-Server selbst zu http: // localhost : 8111/arbeitet feines

  • Browsing von einem anderen Computer, auf http : // ServerIpAddress: 8111/ arbeitet

    Fein von anot
  • Browsing ihren Computer, auf http: // Server: 8111/FAILS (fragt nach Anmeldeinformationen 3-mal, gibt dann 401 Fehler)

Ich habe Online gesucht und versucht, eine Lösung ohne Glück zu finden so weit. Entweder habe ich es nicht gefunden, oder ich verstehe nicht gut genug, was ich lese. Jede Hilfe würde sehr geschätzt werden.

Antwort

38

Ich habe die Lösung mit Hilfe eines Kollegen nach 2 Tagen des Kampfes mit diesem Problem ausgearbeitet. Hier ist, was er schrieb:

There are 2 providers for Windows Authentication (Negotiate and NTLM). When setting the Website Authentication to Windows Authentication, while Windows Authentication is highlighted, click on the Providers link on the right pane or IIS Manager and move NTLM to the top. By default Negotiate is on top which is why you are getting an authentication prompt.

+1

+1 Das war es für mich, während eine tiefergehende und richtige Antwort wäre zu prüfen, warum Negotiate fehlgeschlagen ist dies schnell hervorheben, was falsch ist. – Seph

+0

verlor deswegen einen halben Tag. Danke für die Lösung. – learnerplates

+0

Das löste sich auch für mich. In meinem Fall wurde 504 Gateway Timeout Fehler angezeigt. –

17

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

Lösung

Deaktivieren Sie das Kontroll Loopback

* 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

+0

Danke !!! Das hat für mich funktioniert und ich bin seit einigen Stunden von der Agonie und Frustration der Entwickler befreit. –

+0

Vielen Dank dafür. Ich habe nur einen Blick darauf geworfen und diese Änderung der Registrierung gesehen. Wenn der obige NTLM-Fix nicht funktioniert, empfehle ich, dass dies der definitive nächste Schritt ist. Ich habe gerade viele Arbeitsstunden, die ich damit verbracht habe, herauszufinden, bewiesen! – JTester

+0

Dies würde sich nur auf die Windows-Authentifizierung auswirken, wenn von demselben Computer aus, auf dem sich die Website befindet, – Mick

0

Es ist eine Weile her, seit diese Frage gestellt wurde , aber ich kenne zahlreiche Menschen ru n viel hinein. Eine genauere Lösung dafür finden Sie hier: Kernel-mode authentication. Wir haben das vor einigen Monaten implementiert und es funktioniert gut.

Eine weitere gute Erklärung hier: MORE 2008 AND KERBEROS: AUTHENTICATION DENIED, APP POOL ACCOUNT BEING INGNORED

auf eine einzige Seite anwenden:

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 auf alle Standorte anwenden:

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

Nun, ich hoffte auf eine Erklärung, warum das Entfernen von Negotiate es magisch repariert hat, aber es ist nicht hier. Ich habe versucht, den Kernel-Modus aufzuheben und Negotiate wieder einzubauen, und es hat es nicht repariert. Entfernen Negotiate hat es behoben ... aber warum? –

3

empfehle ich persönlich nicht die loopbackcheck global zu deaktivieren auf Ihrem Server (IE: Do NICHTDisableLoopbackCheck auf einen Wert vonsetzenin Ihrer Registrierung). Dies ist eine Sicherheitslücke. Bitte nur für bekannte Hosts deaktivieren.

Hier ist eine Powershell-Funktion, mit der Sie in die richtige Richtung zeigen können.

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" 

Source

+0

Das Deaktivieren auf internen Dev-Servern sollte kein Risiko darstellen. Wenn es sich um einen Produktionsserver handelt, werden Sie es wahrscheinlich aus der Ferne treffen und können Loopbacks sowieso alleine lassen. –

+0

@Ryios, sogar in Dev, ist der empfohlene Weg, es pro Domäne und nicht global zu tun. In der Produktion haben wir viele Apps (SOA), die andere Apps auf demselben Server aufrufen. –

5

If it still does not work after moving NTML to top in the list of providers try to remove Negotiate completely so there is only NTML left.

, dass es für mich gerichtet - moving NTML nach oben nicht auf Windows Server 2012 und 8.5 IIS geholfen hat. Ich fand die Lösung in der folgenden stackoverflow Problem: IIS 7.5 Windows Authentication Not Working in Chrome

+0

Das funktionierte für mich. – ben

Verwandte Themen