ASP.NET WindowsAuthentication benutzerdefinierte 401 Unauthorized-Fehler-Seite
Habe ich eine ASP.NET web-site mit Authentifizierung über ActiveDirectory.
Jetzt, wenn ein authentifizierter Benutzer eine Seite öffnet - er ist automatisch authentifiziert. Ich habe vor ein problem - wenn ein nicht-authentifizierter Benutzer (beispielsweise ein Mozilla Firefox-Benutzer mit nicht definierten network.automatic-ntlm-auth.trusted-uris
Eigenschaft) öffnet sich eine Seite, sendet IIS 401-Antwort, und fragt nach einem login \ password.
Was ich will, ist nicht auffordern, ihn für einen login - \ Passwort - nur zeigen Sie eine benutzerdefinierte Fehlerseite. Es klingt ziemlich einfach - authentifizierte Benutzer erhalten die angeforderte Seite nicht authentifiziert werden weitergeleitet, um eine benutzerdefinierte Fehlerseite. Es würde funktionieren, für die FormsAuthentication.
Aber ich habe versucht so viele Möglichkeiten mittlerweile. Jede Web.config-Weiterleitungen funktionieren nicht. Auch wenn ich klar einen Response
und dort ein redirect - ich bekomme eine Schleife, da diese benutzerdefinierte Seite (*z.B. /Error/AccessDenied
) auch eine Authentifizierung erfordert. Markieren Sie einen controller wie AllowAnonymous
nichts.
Allerdings wenn ich aktivieren Sie die Anonyme Authentifizierung in IIS-Manager, real authentifizierte Domänen-Benutzer sind nicht berechtigt, wenn Sie öffnen Sie eine web-site.
Wie kann ich dieses problem lösen?
Nicht möglich. Erste Anfrage aus dem browser ist immer anonym. IIS reagiert immer mit
401 Unauthorized
mit www.authenticate: negotiate
(oder NTLM oder beide) header. Der client (browser) fordert dann wieder mit Authorization: Negotiate ..hash..
header dieser Zeit. Je nach Vertrauenswürdige-Website, browser - immer Anmeldeinformationen anfordern. Sie kann nicht zeigen, einen benutzerdefinierten Fehler, weil die erste Reaktion ist immer 401
unabhängig.Sie schreiben, könnte ein HTTP-Modul und Haken auf HttpApplication.PostAuthenticateRequest. Von dort aus können Sie HttpContext.RewritePath-und/oder ziemlich viel Spiel mit der Antwort Kontext, wie Sie wollen. Schwer zu sagen, mehr w/o einer klaren repro-Fall.
Wie Ihre Antwort half mir am meisten, ich würde gerne ein Kopfgeld auf ihn. Könnten Sie, bitte, poste es als Antwort?
Mach dir keine sorgen über die bounty. Immer dein problem gelöst ist wichtiger. Akzeptieren Sie bitte Ihre Antwort. Es ist schön geschrieben und vermittelt die wichtigen Teile gut. Alternativ einfach warten, die bounty Zeit, die Sie nie wissen, erhalten Sie möglicherweise eine bessere Antwort. 🙂
InformationsquelleAutor Yeldar Kurmangaliyev | 2015-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dank @Abhitalks für das erklären, wie es funktioniert in den Kommentaren. Ich weiß nicht, warum, aber ich war mir sicher, dass IE und Google Chrome senden authorization-header auf die erste Anforderung, und das ist, warum, nur nicht autorisierte Benutzer bekommen 401-Antwort. Nachdem ich verstanden habe, kann ich nicht vermeiden, 401-Antwort an alle, ich habe beschlossen, mit diesem einfachen Ansatz, wie dieses Verhalten ist in der Nähe wünschenswert.
Habe ich die folgende Methode in
Global.asax
:Nun, wenn ein Benutzer eine Seite öffnet, der server gibt ihm eine benutzerdefinierte Fehlerseite, aber mit
401 Unauthorized
header.Chrome, IE oder gut konfigurierten Firefox. Der Benutzer fordert eine URL, der server gibt die Fehlermeldung-Seite mit dem 401-header - browser ergänzt automatisch die Autorisierung Herausforderung, leitet auf die gleiche URL, gibt der server die richtige Seite und 200 jetzt. Wird der Benutzer nicht sehen, diese Fehler-Seite.
Nicht konfigurierten Firefox. Anfragen der Benutzer einen URL, der server gibt die Fehlermeldung-Seite mit dem 401-header - browser nicht die vollständige Genehmigung Herausforderung und fordert Benutzer zur Eingabe der Anmeldeinformationen.
Benutzer gibt login -. Anfragen der Benutzer die gleiche URL erneut, eine Seite bekommt und mit 200 OK.
Benutzer gibt falsche login. Ein browser fragt nach Anmeldeinformationen erneut.
Benutzer die Taste Abbrechen. Ein browser zeigt die benutzerdefinierte Fehlerseite, die gesendet wurde mit Kopf-401. Diese Seite erzählt die Benutzer, wenn er Firefox benutzt, dann sollte er entweder seine Zugangsdaten oder erlauben die automatische NTLM-Authentifizierung.
InformationsquelleAutor Yeldar Kurmangaliyev
Wichtige Ergänzung zu Yeldar Kommentar:
Wenn man die response-Nachricht für remote-Zugriffe (Lesen: nicht-localhost), müssen Sie das folgende der Konfigurationsdatei:
Wenn Sie nicht zulassen, dass die Antwort auf "pass-through" remote-Kunden erhalten die Standard -
"You do not have permission to view this directory or page"
.Ich habe diese info von: https://stackoverflow.com/a/17324195/3310441
InformationsquelleAutor KoenW
Überschreiben der HandleUnauthorizedRequest Methode Autorisieren Attribut.
Ex:
InformationsquelleAutor Sajithd