Warum leitet AuthorizeAttribute bei Authentifizierungs- und Autorisierungsfehlern zur Anmeldeseite um?

In ASP.NET MVC können Sie eine Controller-Methode mit markierenAuthorizeAttribute, so was:

[Authorize(Roles = "CanDeleteTags")]
public void Delete(string tagName)
{
    // ...
}

Dies bedeutet, dass die Controller-Methode niemals aufgerufen wird, wenn sich der aktuell angemeldete Benutzer nicht in der Rolle "CanDeleteTags" befindet.

Leider für Ausfälle,AuthorizeAttribute kehrt zurückHttpUnauthorizedResultDies führt zu einer Umleitung zur Anmeldeseite.

Wenn der Benutzer nicht angemeldet ist, ist dies absolut sinnvoll. Wenn der Benutzer jedoch istbereits angemeldet, aber nicht in der erforderlichen Rolle, ist es verwirrend, sie zurück zur Anmeldeseite zu senden.

Es scheint, dassAuthorizeAttribute kombiniert Authentifizierung und Autorisierung.

Dies scheint ein bisschen ein Versehen in ASP.NET MVC zu sein, oder vermisse ich etwas?

Ich musste ein kochenDemandRoleAttribute das trennt die beiden. Wenn der Benutzer nicht authentifiziert ist, gibt er HTTP 401 zurück und sendet diese an die Anmeldeseite. Wenn der Benutzer angemeldet ist, aber nicht die erforderliche Rolle hat, wird ein erstelltNotAuthorizedResult stattdessen. Derzeit wird auf eine Fehlerseite weitergeleitet.

Sicherlich musste ich das nicht tun?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage