0Pricing
C# Academy · Lezione

Autorizzazione basata sulle policy

Definisca policy di autorizzazione riutilizzabili.

Autorizzazione basata sulle policy è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Il modello basato sulle policy

In ASP.NET Core, ogni verifica di autorizzazione passa in definitiva attraverso una policy. Gli attributi per ruoli e claim sono scorciatoie che creano policy in background.

Definire policy denominate centralizza le regole e mantiene puliti i controller.

[Authorize(Policy = "CanManageOrders")]

AddAuthorization

Registri le policy nel contenitore dei servizi con AddAuthorization. A ogni policy viene assegnato un nome univoco.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("CanManageOrders", policy =>
        policy.RequireRole("admin", "sales"));
});

RequireAuthenticatedUser

Il requisito più semplice consiste nel fatto che l'utente abbia effettuato l'accesso. RequireAuthenticatedUser rifiuta le richieste anonime.

options.AddPolicy("SignedIn", policy =>
    policy.RequireAuthenticatedUser());

Combinare i requisiti

Un generatore di policy concatena più requisiti; la policy ha esito positivo solo se li supera tutti.

options.AddPolicy("SeniorEditor", policy =>
    policy
        .RequireAuthenticatedUser()
        .RequireRole("editor")
        .RequireClaim("seniority", "senior"));

La policy predefinita

Un semplice [Authorize] senza argomenti utilizza la policy predefinita, che per impostazione predefinita richiede soltanto un utente autenticato. Può sostituirla.

options.DefaultPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .RequireClaim("email_verified", "true")
    .Build();

La fallback policy

La fallback policy si applica agli endpoint che non hanno alcun attributo di autorizzazione, offrendo un modo efficace per proteggere tutto per impostazione predefinita.

options.FallbackPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();
// Now every endpoint requires auth unless marked [AllowAnonymous]

Escludere gli endpoint con AllowAnonymous

Quando una fallback policy blocca tutto, utilizzi [AllowAnonymous] per esporre endpoint pubblici come quelli per l'accesso o i controlli di stato.

[AllowAnonymous]
[HttpGet("health")]
public IActionResult Health() => Ok("healthy");

Applicare le policy agli endpoint

Faccia riferimento a una policy per nome negli attributi o nelle estensioni delle Minimal API.

// Controller
[Authorize(Policy = "SeniorEditor")]
public IActionResult Publish() => Ok();

// Minimal API
app.MapPost("/publish", () => Results.Ok())
   .RequireAuthorization("SeniorEditor");

Raggruppare gli endpoint

Applichi una policy a un intero gruppo di route, in modo che ogni endpoint al suo interno la erediti.

var admin = app.MapGroup("/admin")
               .RequireAuthorization("CanManageOrders");

admin.MapGet("/stats", () => Results.Ok());
admin.MapDelete("/{id}", (int id) => Results.NoContent());

I requisiti sotto il cofano

Ogni chiamata Require* aggiunge un IAuthorizationRequirement alla policy. Un handler corrispondente valuta ogni requisito. Per quelli integrati questa operazione è automatica; le regole personalizzate richiedono un handler personalizzato (nella lezione successiva).

// RequireRole("admin") adds a RolesAuthorizationRequirement
// RequireClaim(...) adds a ClaimsAuthorizationRequirement

Dove definire le policy

Mantenga tutte le definizioni delle policy in un unico metodo di estensione, così saranno facilmente individuabili e testabili.

public static IServiceCollection AddAppPolicies(
    this IServiceCollection services)
{
    services.AddAuthorization(o =>
    {
        o.AddPolicy("SignedIn", p => p.RequireAuthenticatedUser());
        o.AddPolicy("CanManageOrders", p => p.RequireRole("admin"));
    });
    return services;
}

Verifica rapida

Verifichi la Sua comprensione della differenza tra policy predefinite e fallback policy.

Riepilogo

Ha appreso l'autorizzazione basata sulle policy:

  • AddPolicy definisce regole denominate e riutilizzabili.
  • RequireAuthenticatedUser, RequireRole e RequireClaim si combinano con semantica AND.
  • DefaultPolicy gestisce il semplice [Authorize]; FallbackPolicy protegge gli endpoint privi di annotazioni.
  • [AllowAnonymous] consente di escludere un endpoint.

Successivo: requisiti e handler di autorizzazione personalizzati.

Domande Frequenti

La lezione «Autorizzazione basata sulle policy» è gratuita?

Sì — il testo completo di «Autorizzazione basata sulle policy» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Autorizzazione basata sulle policy»?

Definisca policy di autorizzazione riutilizzabili. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Autorizzazione basata sulle policy»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Autorizzazione basata sui ruoli
  2. Autorizzazione basata sui claim
  3. Autorizzazione basata sulle policy
  4. Requisiti di autorizzazione personalizzati
← Torna a C# Academy