Autorisation simple dans ASP.NET Core

L’autorisation dans ASP.NET Core est contrôlée par AuthorizeAttribute et ses différents paramètres. Dans sa forme la plus basique, l’application [Authorize] de l’attribut à un contrôleur, une action ou une Razor page limite l’accès aux utilisateurs authentifiés du composant.

Le code suivant limite l’accès au AccountController aux utilisateurs authentifiés :

[Authorize]
public class AccountController : Controller
{
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

Si vous souhaitez appliquer une autorisation à une action plutôt qu’au contrôleur, appliquez l' AuthorizeAttribute attribut à l’action elle-même :

public class AccountController : Controller
{
   public ActionResult Login()
   {
   }

   [Authorize]
   public ActionResult Logout()
   {
   }
}

Désormais, seuls les utilisateurs authentifiés peuvent accéder à la Logout fonction.

Vous pouvez également utiliser l' AllowAnonymous attribut pour autoriser l’accès par des utilisateurs non authentifiés à des actions individuelles. Par exemple :

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

Cela autorise uniquement les utilisateurs authentifiés à, à l' AccountController exception de l' Login action, qui est accessible par tout le monde, indépendamment de leur état authentifié ou non authentifié/anonyme.

Avertissement

[AllowAnonymous] ignore toutes les instructions d’autorisation. Si vous combinez [AllowAnonymous] et n’importe quel [Authorize] attribut, les [Authorize] attributs sont ignorés. Par exemple, si vous appliquez [AllowAnonymous] au niveau du contrôleur, tous les [Authorize] attributs du même contrôleur (ou de toute action qu’il contient) sont ignorés.

Le code suivant limite l’accès à la LoginModel Razor page aux utilisateurs authentifiés :

[Authorize]
public class LogoutModel : PageModel
{
    public async Task OnGetAsync()
    {

    }

    public async Task<IActionResult> OnPostAsync()
    {

    }
}

Pour plus d’informations sur la façon d’exiger l’authentification globale de tous les utilisateurs, consultez exiger des utilisateurs authentifiés.

Autoriser l’attribut et les Razor pages

AuthorizeAttributeNe peut pas être appliqué aux Razor gestionnaires de pages. Par exemple, [Authorize] ne peut pas être appliqué à OnGet , OnPost ou à un autre gestionnaire de page. Envisagez d’utiliser un contrôleur ASP.NET Core MVC pour les pages avec des exigences d’autorisation différentes pour différents gestionnaires. Utilisation d’un contrôleur MVC lorsque différentes conditions d’autorisation sont requises :

  • Est l’approche la moins complexe.
  • Est l’approche recommandée par Microsoft.

Si vous décidez de ne pas utiliser un contrôleur MVC, les deux approches suivantes peuvent être utilisées pour appliquer l’autorisation aux Razor méthodes du gestionnaire de page :

  • Utilisez des pages distinctes pour les gestionnaires de pages nécessitant une autorisation différente. Déplacez le contenu partagé dans une ou plusieurs vues partielles. Dans la mesure du possible, il s’agit de l’approche recommandée.
  • Pour le contenu qui doit partager une page commune, écrivez un filtre qui effectue une autorisation dans le cadre de IAsyncPageFilter. OnPageHandlerSelectionAsync. Le projet GitHub PageHandlerAuth illustre cette approche :

Avertissement

L’exemple d’approche PageHandlerAuth n’effectue pas les opérations suivantes :

  • Compose avec les attributs d’autorisation appliqués à la page, au modèle de page ou globalement. La composition des attributs d’autorisation entraîne l’exécution de plusieurs fois AuthorizeAttribute pour une ou plusieurs AuthorizeFilter instances sur la page.
  • Travaillez conjointement avec le reste du système d’authentification et d’autorisation de ASP.NET Core. Vous devez vérifier que l’utilisation de cette approche fonctionne correctement pour votre application.

Il n’est pas prévu de prendre en charge le AuthorizeAttribute sur les Razor gestionnaires de page.