2017-01-27 1 views
0

Ich entwickle eine ASP.NET MVC 5-Website, die lokale STS für die Authentifizierung verwendet. Ich unterordnete das AuthorizeAttribute, um den Authentifizierungs-/Autorisierungsprozess anzupassen, MyAuthorizeAttribute zu GlobalFilters hinzugefügt. Wenn Benutzer ohne authentifiziert hereinkam, fing MyAuthorizeAttribute.OnAuthorize es erfolgreich und erstellt ein SignInRequest, um zu STS umzuleiten. Das ist was ich will. Ich beobachtete, dass, wenn Benutzer erfolgreich authentifiziert und STS Benutzer zurückgeleitet, der Browser des Benutzers einen SAML-Token im Anfragetext an meine MVC-Webanwendung POST, dies ist beabsichtigt, und ich erwartet MyAuthenticateAttribute könnte diese Anfrage abfangen, so dass ich das Token extrahieren kann Überprüfen und validieren Sie es aus dem Anforderungshauptteil, jedoch wurde die MyAuthenticateAttribute.OnAuthorize() - Funktion diesmal nicht aufgerufen, sondern direkt zum Controller. Also ist etwas falsch? Wo soll ich das Token, das vom Benutzer POSTed ist, fangen und behandeln? Vielen Dank.Werden alle eingehenden Anforderungen von AuthorizeAttribute in ASP.NET MVC behandelt?

Antwort

1

Sie müssen Ihre Aktionsmethode mit dem Attribut [Autorisieren] dekorieren oder wenn die Autorisierung für alle Aktionen in einem Controller erfolgen soll, dann legen Sie dieses Attribut auf dem Controller selbst fest.

Werfen Sie auch einen Blick auf die Verwendung von [AllowAnonymous] bei https://www.codeproject.com/Articles/1008731/Insight-of-ASP-NET-MVC-s-Authorize-Attribute

+0

Vergessen zu erwähnen, dass ich MyAuthorizeAttribute GlobalFilters hinzugefügt habe. – codewarrior

1

AuthorizeAttribute ist sowohl ein Attribute und ein IAuthorizationFilter. Attributes nicht wirklich tun alles, das MVC-Framework sucht nach, wo dieses Attribut hinzugefügt wird und registriert es als ein Filter im laufenden Betrieb.

jedoch eher als Controller oder Aktionsmethoden mit ihm dekorieren, können Sie es als globale Filter hinzufügen könnten:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new AuthorizationAttribute()); 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

Aus dem gleichen Grunde können Sie Ihre eigene IAuthorizationFilter oder Unterklasse AuthorizeAttribute schaffen, was Sie zu tun wollen. Wenn es global registriert wird, wird es immer für alle Aktionen ausgeführt, und Sie können es dann verwenden, um Anfragen global zu autorisieren.

+0

Ich habe vergessen zu erwähnen, dass ich MyAuthorizeAttribute zu GlobalFilters hinzugefügt habe. – codewarrior

Verwandte Themen