Ověřování a autorizace v minimálních rozhraních API
Minimální rozhraní API podporují všechny možnosti ověřování a autorizace dostupné v ASP.NET Core a poskytují některé další funkce, které zlepšují práci s ověřováním.
Klíčové koncepty ověřování a autorizace
Ověřování je proces určení identity uživatele. Autorizace je proces určení, jestli uživatel má přístup k prostředku. Scénáře ověřování i autorizace sdílejí podobné sémantiky implementace v ASP.NET Core. Ověřování zpracovává ověřovací služba IAuthenticationService, která se používá ověřovacím middlewarem. Autorizaci zpracovává autorizační služba IAuthorizationService, která se používá autorizačním middlewarem.
Ověřovací služba používá k dokončení akcí souvisejících s ověřováním registrované obslužné rutiny ověřování. Například akce související s ověřováním ověřuje uživatele nebo odhlasuje uživatele. Schémata ověřování jsou názvy, které slouží k jednoznačné identifikaci obslužné rutiny ověřování a možností konfigurace. Obslužné rutiny ověřování zodpovídají za implementaci strategií ověřování a generování deklarací identity uživatele s ohledem na konkrétní strategii ověřování, jako je OAuth nebo OIDC. Možnosti konfigurace jsou pro strategii jedinečné a poskytují obslužné rutině konfiguraci, která ovlivňuje chování ověřování, jako jsou identifikátory URI přesměrování.
Existují dvě strategie pro určení přístupu uživatelů k prostředkům ve vrstvě autorizace:
- Strategie založené na rolích určují přístup uživatele na základě přiřazené role, například
Administrator
.User
Další informace o autorizaci na základě role najdete v dokumentaci k autorizaci na základě role. - Strategie založené na deklarací identity určují přístup uživatele na základě deklarací identity, které vydává centrální autorita. Další informace o autorizaci na základě deklarace identity najdete v dokumentaci k autorizaci na základě deklarace identity.
V ASP.NET Core jsou obě strategie zachyceny do požadavku na autorizaci. Autorizační služba využívá obslužné rutiny autorizace k určení, jestli konkrétní uživatel splňuje požadavky na autorizaci použité u prostředku.
Povolení ověřování v minimálních aplikacích
Pokud chcete povolit ověřování, zavolejte AddAuthentication
na poskytovatele služeb aplikace požadované ověřovací služby.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Obvykle se používá konkrétní strategie ověřování. V následující ukázce je aplikace nakonfigurovaná s podporou ověřování založeného na nosných modelech JWT. Tento příklad využívá rozhraní API dostupná v Microsoft.AspNetCore.Authentication.JwtBearer
balíčku NuGet.
var builder = WebApplication.CreateBuilder(args);
// Requires Microsoft.AspNetCore.Authentication.JwtBearer
builder.Services.AddAuthentication().AddJwtBearer();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Ve výchozím nastavení WebApplication
automaticky zaregistruje ověřovací a autorizační middleware, pokud jsou povolené určité ověřovací a autorizační služby. V následující ukázce není nutné vyvolat UseAuthentication
nebo UseAuthorization
zaregistrovat middlewary, protože WebApplication
to dělá automaticky po AddAuthentication
volání nebo AddAuthorization
jsou volány.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
V některých případech, například řízení pořadí middlewaru, je nutné explicitně zaregistrovat ověřování a autorizaci. V následující ukázce se middleware ověřování spustí po spuštění middlewaru CORS. Další informace omiddlech
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors();
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();
var app = builder.Build();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/", () => "Hello World!");
app.Run();
Konfigurace strategie ověřování
Strategie ověřování obvykle podporují řadu konfigurací, které se načítají prostřednictvím možností. Minimální aplikace podporují možnosti načítání z konfigurace pro následující strategie ověřování:
Architektura ASP.NET Core očekává, že tyto možnosti najdete v Authentication:Schemes:{SchemeName}
části konfigurace. V následující ukázce jsou definována dvě různá schémata Bearer
a LocalAuthIssuer
, s příslušnými možnostmi. Tuto Authentication:DefaultScheme
možnost můžete použít ke konfiguraci výchozí použité strategie ověřování.
{
"Authentication": {
"DefaultScheme": "LocalAuthIssuer",
"Schemes": {
"Bearer": {
"ValidAudiences": [
"https://localhost:7259",
"http://localhost:5259"
],
"ValidIssuer": "dotnet-user-jwts"
},
"LocalAuthIssuer": {
"ValidAudiences": [
"https://localhost:7259",
"http://localhost:5259"
],
"ValidIssuer": "local-auth"
}
}
}
}
Ve Program.cs
dvou strategiích ověřování založených na nosných JWT se zaregistrují následující:
- Název schématu "Nosný"
- Název schématu LocalAuthIssuer
"Bearer" je typické výchozí schéma v aplikacích s podporou JWT-bearer, ale výchozí schéma lze přepsat nastavením DefaultScheme
vlastnosti jako v předchozím příkladu.
Název schématu slouží k jednoznačné identifikaci strategie ověřování a používá se jako vyhledávací klíč při překladu možností ověřování z konfigurace, jak je znázorněno v následujícím příkladu:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication()
.AddJwtBearer()
.AddJwtBearer("LocalAuthIssuer");
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Konfigurace zásad autorizace v minimálních aplikacích
Ověřování se používá k identifikaci a ověření identity uživatelů v rozhraní API. Autorizace se používá k ověření a ověření přístupu k prostředkům v rozhraní API a usnadňuje ho IAuthorizationService
zaregistrovaná metodou AddAuthorization
rozšíření. V následujícím scénáři se přidá prostředek, který vyžaduje, /hello
aby uživatel předložil admin
deklaraci identity role s greetings_api
deklarací oboru.
Konfigurace požadavků na autorizaci prostředku je dvoustupňový proces, který vyžaduje:
- Globální konfigurace požadavků na autorizaci v zásadách
- Použití jednotlivých zásad na prostředky
V následujícím kódu se vyvolá následující kód, AddAuthorizationBuilder který:
- Přidá do kontejneru DI služby související s autorizací.
- Vrátí zásadu AuthorizationBuilder , která se dá použít k přímé registraci zásad autorizace.
Kód vytvoří novou zásadu autorizace s názvem admin_greetings
, která zapouzdřuje dva požadavky na autorizaci:
- Požadavek na základě role prostřednictvím RequireRole uživatelů s
admin
rolí. - Požadavek založený na deklaraci identity prostřednictvím RequireClaim toho, že uživatel musí poskytnout
greetings_api
deklaraci oboru.
Zásada admin_greetings
se do koncového /hello
bodu poskytuje jako požadovaná zásada.
using Microsoft.Identity.Web;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorizationBuilder()
.AddPolicy("admin_greetings", policy =>
policy
.RequireRole("admin")
.RequireClaim("scope", "greetings_api"));
var app = builder.Build();
app.MapGet("/hello", () => "Hello world!")
.RequireAuthorization("admin_greetings");
app.Run();
Použití dotnet user-jwts
pro vývojové testování
V tomto článku se používá aplikace nakonfigurovaná s ověřováním na základě nosných objektů JWT. Ověřování založené na nosných objektech JWT vyžaduje, aby klienti v hlavičce požadavku předložili token k ověření identity a deklarací identity. Tyto tokeny obvykle vydává centrální autorita, například server identit.
Při vývoji na místním počítači dotnet user-jwts
lze nástroj použít k vytvoření nosných tokenů.
dotnet user-jwts create
Poznámka:
Při vyvolání projektu nástroj automaticky přidá možnosti ověřování odpovídající vygenerovanému tokenu .appsettings.json
Tokeny je možné nakonfigurovat s různými přizpůsobeními. Pokud například chcete vytvořit token pro admin
roli a greetings_api
obor očekávaný autorizačními zásadami v předchozím kódu:
dotnet user-jwts create --scope "greetings_api" --role "admin"
Vygenerovaný token se pak dá odeslat jako součást hlavičky ve zvoleném testovacím nástroji. Například s curl:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/hello
Další informace o nástroji dotnet user-jwts
najdete v úplné dokumentaci.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro