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 ClaimsAuthorizationRequirementDove 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:
AddPolicydefinisce regole denominate e riutilizzabili.RequireAuthenticatedUser,RequireRoleeRequireClaimsi 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
- Autorizzazione basata sui ruoli
- Autorizzazione basata sui claim
- Autorizzazione basata sulle policy
- Requisiti di autorizzazione personalizzati