Ich habe dies seit zwei Tagen versucht. Ich verstehe nicht, wo das Problem liegt. Ich habe im Internet gesucht, aber keine Lösung gefunden. Ich habe alle Einstellungen von IIS ausprobiert, wie „Verhandlung nach unten verschieben, andere Authentifizierung deaktivieren“, aber es funktioniert nicht. Also, hier ist mein Problem: Ich habe eine Intranet-Webanwendung in ASP.NET, die Benutzernamen und Passwörter verwendet, die in Active Directory gespeichert sind. Ich habe fünf verschiedene Seiten in meiner Anwendung. Alle Seiten sind in separaten Ordnern mit ihren web.config-Dateien gespeichert. Diese web.config-Dateien enthalten die Namen der Benutzer, die diese Seite wie folgt anzeigen dürfen.
<authorization>
<allow users="Domainname\username"/>
</authorization>
Ich möchte Benutzer, die nicht in der obigen Liste aufgeführt sind, auf eine andere Fehlerseite mit einer entsprechenden Meldung umleiten. Ich habe diese
protected void Application_EndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Response.Status.StartsWith("401"))
{
HttpContext.Current.Response.ClearContent();
Response.Redirect("~/myerrorpage.aspx?myerrormsg=you are not allowed");
}
}
Dies funktioniert auf dem lokalen Host, aber wenn ich meine Anwendung in IIS einfüge, werden alle autorisierten Benutzer (diejenigen, die in der Liste stehen) auch auf die Fehlermeldungsseite umgeleitet.
Außerhalb von IIS funktioniert es einwandfrei. Allerdings kann ich nicht autorisierte Benutzer nicht auf eine Fehlermeldungsseite umleiten. Ich habe es auch mit den Fehlerseiteneinstellungen von IIS versucht, aber ich habe das gleiche Problem.
Bitte schlagen Sie mir vor, was ich tun soll, um dies zu korrigieren. Gibt es eine andere Möglichkeit, dies zu tun?
Antwort1
Ich weiß nicht genau, ob dies in Ihrem speziellen Fall das Problem ist, aber im Allgemeinen läuft der Vorgang wie folgt ab:
- Browser versucht eine Verbindung herzustellenanonymbei der ersten Verbindung
- Der Webserver sagt: „Das ist leider nicht möglich, Fehler 401. So kann sich der Benutzer authentifizieren.“
- Der Browser kümmert sich um die Authentifizierung (z. B. fragt den Benutzer nach seinen Anmeldeinformationen)
- Der Browser stellt eine zweite Anfrage, die die Informationen im Authentifizierungsheader enthält.
Ich vermute, dass Sie bei Schritt (1) scheitern, weil Sie die erste 401-Fehlermeldung abfangen, bevor der Benutzer die Möglichkeit hat, seine Anmeldeinformationen einzugeben. Sie können dies mit F12-Tools oder mit einem Tool wie Fiddler überprüfen.
Antwort2
Wenn Sie die Windows-Authentifizierung verwenden, sollten Sie Folgendes beachten: Wenn Sie die Windows-Authentifizierung in IIS manuell aktivieren, fügen Sie den folgenden Code bitte nicht in Ihre web.config ein.
<authentication mode="Windows" />
Wenn Sie dies verwenden, tritt dasselbe Problem auf, das ich oben in meiner Frage angegeben habe.