401 - Nicht autorisiert auf Server 2008 R2 IIS 7.5

20

Ich habe eine Webanwendung für Server 2008 IIS 7.5 bereitgestellt.

Von Remote gibt es diese Fehlermeldung: 401 - Unauthorized: Access is denied due to invalid credentials. (remote = Desktops im selben LAN)

Habe mehrere Remote-Clients mit unterschiedlichen Browsern ausprobiert, alle das gleiche Ergebnis. (IE, FF und Chrome)

Das Schlagen der Anwendung vom Desktop des Servers aus funktioniert einwandfrei . Allerdings habe ich Firebug auf dem Server-Desktop nicht ausprobiert. Ich würde davon ausgehen, dass es immer noch einen 401-Statuscode ausgibt und trotzdem den Inhalt zurückgibt. Siehe Update Nr. 2.

Die Anwendung verwendet die anonyme Authentifizierung.

Die Anwendung wurde unter Verwendung des MVC-Frameworks in .NET 4.0 Asp.Net geschrieben.

Statischer Inhalt funktioniert einwandfrei, Beispiel: http://server.com/content/image.jpg

Sysinternals procmongibt diese 2 Ergebnisse für jede Anforderung zurück: FAST IO DISALLOWED und PATH NOT FOUND.

Ich habe 2 andere MVC-Apps, die problemlos auf demselben Server ausgeführt werden. Ich habe die Sicherheit der Ordner überprüft und sie stimmen alle überein.

App läuft gut auf einem Server 2008 IIS 7.0-Box.

Im Ereignisprotokoll auf dem damit verbundenen Server wird nichts angezeigt.

Hast du irgendwelche Tipps zur Fehlerbehebung?

UPDATE # 1 : Das wird nur mehr WTF, wenn ich grabe.

Wenn ich im IIS-Manager auf Anwendung -> Fehlerseiten -> Funktionseinstellungen bearbeiten klicke Detailed Errors, funktioniert die App remote. Wenn Sie dies nicht aktiviert lassen, ist das Problem noch nicht gelöst. Es ist nur verwirrender.

UPDATE 2 : Unter Verwendung von Firebug sehe ich, dass der Status noch immer angezeigt wird 401 Unauthorized, die Antwort jedoch den korrekten HTML-Code der Anwendung zurückgibt.

UPDATE Nr. 3 : Hier ist die WARNING-Anforderungsverfolgung, die den 401 verursacht:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

Das regelmäßige IIS-Protokoll von Update Nr. 4 zeigt Folgendes:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414
mxmissile
quelle
Haben Sie versucht, die Ablaufverfolgung für fehlgeschlagene Anforderungen auf dem Server auszuführen und über den Remotecomputer auf die Anwendung zuzugreifen? Wenn es einen Fehler gibt, sollten Sie die Ursache sehen.
Vivek Kumbhar
@ vivek siehe mein letztes Update
mxmissile
ARRG !!! Habe aber dadurch nochmal! 2 Stunden lang gesucht Html.RenderAction, dann wurde Html.Actionmir klar, dass Razor meine ersten Suchanfragen nicht ausgeführt hat.
mxmissile
Oh, es ist schon ein paar Jahre her, weißt du was? Habe gerade 3 Stunden an diesem Morgen auf diesem WIEDER verschwendet! Wann werde ich lernen?!?!?!
mxmissile

Antworten:

19

Manchmal muss man einen Schritt zurücktreten ... Die Ursache dafür war Html.RenderAction()meiner Meinung nach, dass ich eine Aktionsmethode aufgerufen habe, die mit dem [Authorize]Attribut markiert war .

mxmissile
quelle
1
Dies war mein Problem, es war frustrierend genug, um einen Panda zu schlagen (nicht, dass ich würde). Danke mxmissile.
Khalid Abuhakmeh
4

Da es lokal aber nicht remote funktioniert, klingt es für mich so, als ob das anonyme Benutzerkonto keinen Zugriff auf etwas hat, Ihr Windows-Benutzer jedoch. Um dies zu beweisen, deaktivieren Sie die Windows-Authentifizierung für die Website und prüfen Sie, ob sie lokal fehlerhaft ist.

Was auch immer kaputt geht, wird wahrscheinlich als Ihre Website-Identität anstatt als Ihre App-Pool-Identität ausgeführt, andernfalls würde es lokal und remote kaputt gehen. Wenn Sie 1: 1-Zuordnungen von Websites zu App-Pools haben oder eine sehr vertrauenswürdige Umgebung haben, empfiehlt es sich, das anonyme Benutzerkonto für die Verwendung der App-Pool-Identität festzulegen. Dann brauchen Sie sich keine Sorgen um einen zweiten Benutzer zu machen.

Sie haben Process Explorer erwähnt. Das ist gut, um laufende Informationen zu finden, aber das Tool, das wahrscheinlich Fehler bei der Zugriffsverweigerung aufdeckt, ist processmon (auch von sysinternals). Probieren Sie es aus, wiederholen und erfassen Sie es und suchen Sie dann nach dem Wort "verweigert". Es sollte alle Probleme mit verweigertem Zugriff auf der Festplatte auftauchen.

Scott Forsyth - MVP
quelle
4

Sie werden dasselbe Verhalten haben, wenn Sie einen Filter für die benutzerdefinierte Autorisierung haben, der von AuthorizeAttributeund einem oder mehreren Aufrufen von OnAuthorizationmethod erbt , wobei einer von ihnen AuthorizationContext.Resultauf `HttpUnauthorizedResult 'gesetzt ist.

Elfdragore
quelle
4

Aus irgendeinem Grund hat dies mein Problem behoben.

  1. Klicken Sie auf Site in IIS.
  2. Doppelklicken Sie auf Authentifizierung
  3. Klicken Sie mit der rechten Maustaste und wählen Sie Erweiterte Einstellungen
  4. Deaktivieren Sie "Kernelmodus-Authentifizierung aktivieren".
CTom
quelle
2

Haben Sie die Einstellungen unter Autorisierungsregeln überprüft? Wenn jemand auf diese Seite zugreifen kann (was anscheinend Ihr Ziel ist), stellen Sie sicher, dass Sie eine "Zulassen" -Regel haben, die "Alle Benutzer" in der Benutzerspalte enthält.

Stellen Sie dann unter "Authentifizierung" sicher, dass keine Konflikte vorliegen und nur die anonyme Authentifizierung aktiviert ist.

Hoffentlich hilft das.

Campo
quelle
1
Zulassen - Alle Benutzer - Vererbt
mxmissile