Unerlaubten Seitenzugriff in MVC zur benutzerdefinierten Ansicht umleiten

7

Ich habe eine MVC-Website, auf der der Zugriff auf verschiedenen Rollen basiert. Sobald sich ein Benutzer am System anmeldet, kann er die Navigation zu den Seiten sehen, für die er berechtigt ist. Einige Benutzer versuchen jedoch möglicherweise weiterhin, mithilfe einer direkten URL auf Seiten zuzugreifen. Wenn dies der Fall ist, leitet das System sie automatisch zur Anmeldeseite weiter. Statt der Login-Seite möchte ich sie in eine andere Ansicht umleiten (Unauthorized).

Web.Config hat folgenden Eintrag:

%Vor%

Ich habe diese Routen auch in Global.asax.cs registriert.

%Vor%

Wird es genug sein?

    
user2739418 27.02.2014, 16:27
quelle

4 Antworten

12

Mit folgender Änderung funktioniert es

%Vor%

Und dann auf Controller oder Aktion wie folgt anwenden:

%Vor%

Bei der obigen Vorgehensweise muss ich alle Controller / Aktionen erneut aufrufen und das Attribut "Authorized" ändern. Auch einige Tests werden benötigt.

Ich bin mir immer noch nicht sicher, warum die Web.Config-Route nicht wie in der MVC-Dokumentation beschrieben funktioniert. Möglicherweise hat sich in MVC 4 etwas geändert!

    
user2739418 27.02.2014, 17:09
quelle
14

Nach ein paar Recherchen ist die einfachste Antwort auf dieses Problem die Erstellung einer benutzerdefinierten Autorisierung, die der von jbbi sehr ähnlich ist (aber diese hat nicht funktioniert, seit die "neue HttpUnauthorizedResult ()" intern automatisch zur Anmeldung weitergeleitet wird - zumindest in mvc 5 mit Identität)

%Vor%

und die Verwendung entspricht der Standardautorisierung:

%Vor%

Dann, um die Dinge richtig zu machen, vergessen Sie nicht, den HTTP-Code der Fehlerseite auszusenden. f. so in der Steuerung.

%Vor%

Es ist einfach, es funktioniert und sogar ich (.net mvc Rookie) verstehe das.

Hinweis: Es funktioniert nicht mit dem 401-Code - es übernimmt immer den 401 und leitet ihn intern zum Login um. Aber in meinem Fall ist per Definition auch der 403 passend.

    
The Vojtisek 18.08.2014 00:12
quelle
2

Der beste Weg, dies zu umgehen, ist, einen zusätzlichen Aktionsfilter zu erstellen, der den Benutzer auf die angegebene Fehlerseite umleitet, wenn er nicht zur angegebenen Rolle gehört. Bei diesen Methoden werden also beide Filter angewendet: [Autorisieren] (ohne Rollen), um vor nicht authentifizierten Benutzern zu schützen und sie auf die Anmeldeseite umzuleiten. Und Ihr benutzerdefiniertes Attribut mit den Rollen. Code ähnlich zu diesem (nicht getestet):

%Vor%

Übernehmen Sie sowohl [Authorize] als auch [RoleFilter] für die Aktionen ...

Hoffe, das hilft!

    
eiximenis 27.02.2014 16:53
quelle
0

Ich denke, Sie sollten Ihr eigenes Autorisierungsfilterattribut erstellen, das den Standardautorisierungsfilter

erbt %Vor%     
binard 27.02.2014 16:39
quelle