3 Stimmen

ASP.NET überschreibt den Standard-Returnto-Parameter innerhalb der Umleitung, wenn ein Benutzer nicht authentifiziert ist

Wir verwenden die Formularauthentifizierung mit Rollen, um den Zugriff auf bestimmte Seiten und Bereiche einer Website zu beschränken. Wenn ein Benutzer nicht autorisiert ist, weil er entweder nicht angemeldet ist oder nicht die erforderliche Rolle hat, wird er zur Anmeldeseite mit einer Return-to-Url weitergeleitet.

Wir definieren den erforderlichen Zugriff in der web.config mit Hilfe der Autorisierungs-Tags wie:

<authorization>
    <deny users="?"/>
</authorization>

Die Webanwendung, an der wir arbeiten, verwendet HttpContext.Current.RewritePath für freundlichere URLs und dynamische Seiten. So wird eine Anforderung für "/MyPages/MyDocuments.aspx!" in "/PageTypes/Library.aspx" oder etwas Ähnliches umgeschrieben.

Wenn die Anwendung jedoch umleitet, weil ein Benutzer keine Berechtigung hat, wird der ReWritePath anstelle der Raw URL verwendet.

Was muss ich überschreiben, so dass die returnto URL die angeforderte URL anstelle der tatsächlichen psychischen Pfad ist?

1voto

PortageMonkey Punkte 2625

Je nachdem, welche Version von IIS (6 oder 7) Sie ausführen, kann die Antwort unterschiedlich ausfallen. Ich vermute jedoch, dass das Problem darin besteht, dass die ASP.NET-Anforderungspipeline den Benutzer zunächst mithilfe der Formularauthentifizierung authentifiziert und dann später den RewritePath-Code / das RewritePath-Modul ausführt, wodurch die normale returnto-Antwort überschrieben wird.

Der Schlüssel kann darin liegen, das Rewrite-Modul vor den Authentifizierungs- und Autorisierungsmodulen in die Pipeline zu integrieren. Wenn Sie in Ihrer Basisklasse, global.asax usw. Rohcode statt eines HTTP-Moduls verwenden, prüfen Sie zunächst, ob der Benutzer gültig bzw. berechtigt ist, bevor Sie den Code ausführen.

ASP.NET Pipeline und Überlegungen zu Rewriting vs. Routing

0voto

John_ Punkte 2921

Was ich am Ende tat, war, meinen Code in Application_AuthorizeRequest zu verschieben, was bedeutete, dass der Benutzer authentifiziert wurde, bevor die Seite angefordert wurde, wodurch die ursprüngliche URL intakt blieb.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X