Wie das abfangen 401 von Forms-Authentifizierung in ASP.NET MVC?

Ich möchte erzeugen eine 401-Seite, wenn der Benutzer nicht über die richtigen Berechtigungen.

Fordert der Benutzer eine url ein und gelangt auf die login-Seite (ich habe alle verweigern anonyme im web.config). Der Benutzer meldet sich erfolgreich an und auf dem ursprünglichen url umgeleitet. Jedoch, nach überprüfung der Berechtigung, es ist bestimmt, dass der Benutzer nicht über die erforderliche Berechtigung, also ich würde gerne erzeugen ein 401. Aber die Forms-Authentifizierung immer behandelt 401 und leitet den Benutzer auf die login-Seite.

Mir, das ist nicht richtig. Der Benutzer hat bereits authentifiziert, die user einfach nicht die richtigen Genehmigung.

In anderen Szenarien, wie in ajax oder REST-service-Szenario, ich definitiv nicht wollen, dass die login-Seite - ich brauche die richtige Seite 401.

So weit, ich habe versucht benutzerdefinierte Autorisieren filter zurück ViewResult mit 401 aber hat nicht funktioniert. Ich habe dann versucht eine normale Aktion Filter, überschreiben OnActionExecuting, das hat nicht funktioniert entweder.

Was ich war in der Lage zu tun ist, ein Ereignis zu behandeln, die in global.asax, PostRequestHandlerExecute, und die Kontrollkästchen für die Berechtigung schreiben Sie dann direkt zu einer Antwort:

if (permissionDenied)
{
    Context.Response.StatusCode = 401;
    Context.Response.Clear();
    Context.Response.Write("Permission Denied");
    Context.Response.Flush();
    Context.Response.Close();
    return;
}

Dass funktioniert, aber es ist nicht wirklich das was ich will.
Zunächst, ich bin mir auch nicht sicher, ob das die richtige Veranstaltung oder den Ort in der pipeline, das zu tun.
Zweitens möchte ich die 401-Seite, um ein wenig mehr Inhalt. Vorzugsweise sollte es sein, eine aspx-Seite, eventuell mit der gleichen master-Seite als der rest der Seite. So, wer sich die Website ansieht kann sehen, dass die Erlaubnis verweigert wird, aber mit dem gleichen look and feel, etc. aber die ajax-oder service-Benutzer den richtigen status-code zu handeln.

Jede Idee, wie dies erreicht werden kann?
Ich habe gesehen, andere Beiträge mit ähnlichen Anforderungen aber nicht sehen, eine Lösung, die ich verwenden kann.

Und Nein, ich glaube nicht, dass ein 403.

InformationsquelleAutor Jiho Han | 2010-05-28
Schreibe einen Kommentar