Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto rychlém startu chráníte webové rozhraní API ASP.NET Core pomocí Microsoft Entra ID a Microsoft.Identity.Web. Přidáte ověřovací middleware, který ověřuje nosné tokeny a omezuje přístup autorizovaným volajícím.
Pokud nemáte předplatné Azure, vytvořte si bezplatný účet před zahájením.
Předpoklady
- .NET 9 SDK
- Tenant služby Microsoft Entra ID. Pokud ho nemáte, vytvořte bezplatný účet.
- Registrace aplikace pro vaše rozhraní API
Možnost 1: Vytvoření ze šablony (nejrychlejší)
K vygenerování projektu chráněného rozhraní API použijte šablonu ASP.NET Core s integrovaným ověřováním Microsoft Entra.
1. Vytvoření projektu
Spuštěním následujících příkazů vytvořte nový projekt webového rozhraní API s ověřováním jedné organizace a přejděte do adresáře projektu:
dotnet new webapi --auth SingleOrg --name MyWebApi
cd MyWebApi
2. Konfigurace registrace aplikace
Zástupné hodnoty v appsettings.json nahraďte podrobnostmi o registraci aplikace Microsoft Entra:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id"
}
}
3. Spuštění rozhraní API
Spusťte aplikaci:
dotnet run
Vaše rozhraní API je teď chráněné na adrese https://localhost:5001.
Hotovo! Požadavky teď vyžadují platný přístupový token.
Možnost 2: Přidání do existujícího webového rozhraní API
Pokud už máte webové rozhraní API ASP.NET Core, přidejte Microsoft Entra ověřování pomocí následujícího postupu.
1. Instalace balíčku NuGet
Přidejte Microsoft. Balíček NuGet Identity.Web do projektu:
dotnet add package Microsoft.Identity.Web
2. Konfigurace ověřování v Program.cs
Zaregistrujte ověřovací a autorizační služby ve spouštěcím kanálu vaší aplikace. Následující kód konfiguruje ověřování nositele JWT s validací Microsoft Entra:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
var builder = WebApplication.CreateBuilder(args);
// Add authentication
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration, "AzureAd");
// Add authorization
builder.Services.AddAuthorization();
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthentication(); // Add authentication middleware
app.UseAuthorization();
app.MapControllers();
app.Run();
3. Přidejte konfiguraci do appsettings.json
Přidejte část konfigurace Microsoft Entra s podrobnostmi o tenantovi a aplikaci. Nastavte úroveň protokolování pro Microsoft.Identity.Web na Information, abyste mohli řešit potíže s ověřováním tokenů:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Identity.Web": "Information"
}
}
}
4. Ochrana koncových bodů rozhraní API
[Authorize] Použijte atribut na kontrolery nebo akce, které vyžadují platný přístupový token.
Vyžadovat autentizaci pro všechny koncové body:
Následující kontroler vyžaduje platný přístupový token pro všechny akce a ukazuje, jak získat přístup k deklaracím identity uživatelů:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Authorize] // Require valid access token
[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
// Access user information
var userId = User.FindFirst("oid")?.Value;
var userName = User.Identity?.Name;
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = "Protected data"
});
}
}
Vyžadovat konkrétní obory:
Pomocí atributu [RequiredScope] vynucujte jemně odstupňovaná oprávnění pro jednotlivé akce:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Web;
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class TodoController : ControllerBase
{
[HttpGet]
[RequiredScope("access_as_user")] // Require specific scope
public IActionResult GetAll()
{
return Ok(new[] { "Todo 1", "Todo 2" });
}
[HttpPost]
[RequiredScope("write")] // Different scope for write operations
public IActionResult Create([FromBody] string item)
{
return Created("", item);
}
}
5. Spuštění a testování
Spusťte aplikaci a ověřte, že jsou neověřené požadavky odmítnuty:
dotnet run
Otestujte nástroj, jako je Postman nebo curl. Neověřený požadavek vrátí 401 Unauthorized:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://localhost:5001/api/weatherforecast
Úspěch! Vaše rozhraní API teď ověřuje nosné tokeny.
Nastavení registrace aplikace
Než vaše rozhraní API dokáže ověřit tokeny, potřebujete registraci Microsoft Entra aplikace. Na portálu Azure postupujte takto.
1. Registrace rozhraní API
- Přihlaste se k portálu Azure
- Přejděte na Microsoft Entra ID>Registrace aplikací>Nová registrace
- Zadejte název (např. Moje webové rozhraní API).
- Výběr jednoho tenanta (nejběžnější pro rozhraní API)
- Pro API není potřeba žádné URI přesměrování.
- Klikněte na Zaregistrovat.
2. Zveřejnění oboru rozhraní API
Definujte oprávnění (obory), které můžou klientské aplikace požadovat při volání rozhraní API.
- V registraci aplikace API přejděte na Zveřejnit rozhraní API.
- Klikněte na Přidat obor.
- Přijměte výchozí identifikátor URI ID aplikace nebo ho přizpůsobte (např.
api://your-api-client-id) - Přidejte obor:
-
Název oboru:
access_as_user - Kdo může souhlasit: Správci a uživatelé
- Zobrazovaný název souhlasu správce: Přístup k webovému API
- Popis souhlasu správce: "Umožňuje aplikaci přístup k webovému rozhraní API jménem přihlášeného uživatele"
-
Název oboru:
- Klikněte na Přidat obor.
3. Poznamenejte si ID aplikace.
Zkopírujte ID aplikace (klienta) ze stránky s přehledem registrace aplikace. Tato hodnota je vaše ClientId v appsettings.json.
Vytvoření registrace klientské aplikace (pro testování)
Pokud chcete otestovat chráněné rozhraní API, zaregistrujte samostatnou klientskou aplikaci, která získává tokeny a volá rozhraní API.
1. Registrace klientské aplikace
- V Microsoft Entra ID>Registrace aplikací vytvořte další registraci.
- Pojmenujte ho (např. "My API Client")
- Výběr typů účtů
- Přidejte identifikátor URI přesměrování:
https://localhost:7000/signin-oidc(pokud se jedná o webovou aplikaci) - Klikněte na Zaregistrovat.
2. Udělení oprávnění rozhraní API
Udělte klientské aplikaci oprávnění k volání rozhraní API s definovanými obory.
- V registraci klientské aplikace přejděte na oprávnění rozhraní API.
- Klikněte na Přidat oprávnění>Moje rozhraní API.
- Výběr registrace rozhraní API
- Zkontrolujte rozsah
access_as_user - Klikněte na Přidat oprávnění.
- Klikněte na Udělit souhlas správce (v případě potřeby).
3. Vytvoření tajného klíče klienta (pro důvěrné klienty)
Pokud klientská aplikace běží na serveru (ne v prohlížeči nebo mobilním zařízení), vytvořte tajný klíč klienta pro ověření.
- Přejděte na Certifikáty a tajné kódy
- Klikněte na Nový tajný klíč klienta.
- Přidání popisu a vypršení platnosti
- Klikněte na Přidat.
- Okamžitě zkopírujte hodnotu tajného kódu – už ji neuvidíte.
Testování chráněného rozhraní API
Ověřte, že vaše rozhraní API správně ověřuje tokeny odesláním ověřených požadavků.
Použití nástroje Postman
Nastavte ověřování OAuth 2.0 v Postmanu, abyste získali token a volali vaše rozhraní API.
- Vytvoření nového požadavku v Nástroji Postman
- Nastavení ověřování OAuth 2.0:
- Typ udělení: Autorizační kód (pro kontext uživatele) nebo přihlašovací údaje klienta (pro kontext aplikace)
-
Adresa URL ověřování:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize -
Adresa URL přístupového tokenu:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token - ID klienta: ID klienta klientské aplikace
- Tajný klíč klienta: Tajný kód klientské aplikace
-
Rozsah:
api://your-api-client-id/access_as_user
- Klikněte na Získat nový přístupový token.
- Použití tokenu k volání rozhraní API
Použití kódu (příklad jazyka C#)
Následující příklad používá MSAL.NET k získání tokenu s tokem přihlašovacích údajů klienta a volání chráněného rozhraní API:
// In a console app or client application
using Microsoft.Identity.Client;
var app = ConfidentialClientApplicationBuilder
.Create("client-app-id")
.WithClientSecret("client-secret")
.WithAuthority("https://login.microsoftonline.com/{tenant-id}")
.Build();
var result = await app.AcquireTokenForClient(
new[] { "api://your-api-client-id/.default" }
).ExecuteAsync();
var accessToken = result.AccessToken;
// Use the token to call your API
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.GetAsync("https://localhost:5001/api/weatherforecast");
Běžné možnosti konfigurace
Microsoft. Identity.Web podporuje několik vzorů konfigurace pro různé scénáře.
Vyžadování konkrétních oborů v konfiguraci
Místo použití atributu [RequiredScope] můžete nakonfigurovat požadované obory globálně v appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id",
"Scopes": "access_as_user"
}
}
Přijmout tokeny z více tenantů
Pokud chcete přijímat tokeny z libovolného tenanta Microsoft Entra, nastavte TenantId na common:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "common",
"ClientId": "your-api-client-id"
}
}
Konfigurace ověřování tokenů
Pokud vaše rozhraní API volá podřízená rozhraní API (například Microsoft Graph), povolte získání tokenu a nakonfigurujte mezipaměť tokenů:
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi() // If your API calls other APIs
.AddInMemoryTokenCaches();
Další kroky
Teď, když máte chráněné rozhraní API, prozkoumejte tato témata:
- Volejte podřízená rozhraní API – volejte Microsoft Graph nebo jiná rozhraní API jménem uživatelů.
- Konfigurace mezipaměti tokenů – strategie produkční mezipaměti pro scénáře OBO
- Dlouhotrvající procesy – Zpracování úloh na pozadí pomocí tokenů OBO
- Nasadit za bránou rozhraní API – Azure API Management, Azure Front Door, Application Gateway.
Troubleshooting
401 Neautorizováno
Problém: Rozhraní API vrátí hodnotu 401 i s tokenem.
Možné příčiny:
- Cílová skupina tokenů (
auddeklarace identity) neodpovídá vašemu rozhraní APIClientId - Platnost tokenu vypršela.
- Token je určen pro nesprávného nájemce.
- Chybí požadovaný obor.
Řešení: Dekódujte token na jwt.ms a ověřte nároky. Podrobné řešení potíží najdete v tématu Protokolování a diagnostika .
AADSTS50013: Neplatný podpis
Problém: Ověření podpisu tokenu se nezdaří.
Řešení: Ujistěte se, že jsou vaše TenantId a ClientId správné. Token musí vydat očekávaná autorita. Pokud chcete zobrazit chyby ověření, povolte podrobné protokolování.
Rozsahy nebyly v tokenu nalezeny.
Problém:[RequiredScope] atribut selže.
Solution:
- Ověřte, že klientská aplikace má oprávnění k rozsahu.
- Ujistěte se, že byl udělen souhlas správce (v případě potřeby).
- Kompletní vzory ověřování rozsahu najdete v Průvodci autorizací .
- Zkontrolujte, zda je obor požadován při získávání tokenu (např.
api://your-api/.defaultnebo konkrétní obory).
Další informace:Průvodce odstraňováním potíží s webovým rozhraním API
Související obsah
- Průvodce autorizací – atribut RequiredScope, zásady autorizace, filtrování tenanta
- Průvodce přizpůsobením – Konfigurace možností nosných a ověřovacích parametrů JWT
- Protokolování a diagnostika – Řešení potíží s ověřováním pomocí korelačních ID
- Kurz chráněného webového rozhraní API
- ukázky API