Question

J'ai un attribut d'authentification super simple que j'essaie d'implémenter dans une application ASP.NET MVC 5 et j'ai des problèmes.Je souhaite que l'attribut soit appliqué globalement, sauf pour des actions spécifiques au sein d'un contrôleur (par exemple le formulaire de connexion et la page d'accueil).

J'ai essayé de décorer l'action avec le [OverrideAuthentication] attribut sans chance.Cela me donne une erreur de boucle de redirection car l'application exécute toujours l'authentification sur le formulaire de connexion et continue d'essayer de rediriger vers le formulaire de connexion encore et encore.

Quelqu'un d'autre a-t-il vu ce comportement ?Une idée de ce que j'ai fourré ici ?

A titre d'exemple, j'ai créé un filtre super simple qui n'est actuellement pas implémenté :

public class BasicAuthenticationAttribute
    : ActionFilterAttribute, IAuthenticationFilter
{

    public void OnAuthentication(AuthenticationContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        throw new NotImplementedException();
    }
}

Si je décore mon contrôleur/action comme ceci :

[BasicAuthentication]
public class AccountController : Controller
{
    [HttpGet]
    [OverrideAuthentication]
    public ActionResult Login()
    {
        return View();
    }
}

J'obtiens une exception non implémentée lorsque j'accède à l'action de connexion, même si cette action ne devrait pas du tout exécuter le code d'authentification.Ai-je mal compris comment les remplacements sont censés fonctionner ?

Était-ce utile?

La solution

Je pense que vous avez confondu l'authentification et l'autorisation (comme beaucoup de gens).Cela n'a pas de sens de créer un [BasicAuthenticationAttribute] et de l'enregistrer globalement, car l'authentification ne se produit qu'à la connexion, et non à chaque demande.

L'autorisation est ce qui a lieu une fois que l'utilisateur s'est connecté pour vérifier s'il dispose des privilèges requis pour effectuer une action spécifique, et il est logique d'effectuer une autorisation globale.L'autorisation dans MVC est gérée par [AuthorizeAttribute] et vous pouvez en hériter si vous devez personnaliser la façon dont la vérification d'autorisation est effectuée.Vous pouvez également l'enregistrer en tant que filtre global.

Le [AllowAnonymousAttribute] fonctionne en conjonction avec [AuthorizeAttribute] et lui indique essentiellement d'ignorer la vérification d'autorisation.Il convient également de noter que [AllowAnonymousAttribute] n'aura aucun effet à moins qu'il ne soit utilisé avec [AuthorizeAttribute].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top