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?

Sie wollen nicht-IE-Benutzer umleiten auf eine andere Seite? URL-rewriting basiert auf User-Agent ist der Weg zu gehen.
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

Schreibe einen Kommentar