Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze quickstart beveiligt u een ASP.NET Core web-API met Microsoft Entra ID met behulp van Microsoft. Identity.Web. U voegt verificatie-middleware toe waarmee bearer-tokens worden gevalideerd en de toegang wordt beperkt tot geautoriseerde bellers.
Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
Vereiste voorwaarden
- .NET 9 SDK
- Een Microsoft Entra ID tenant. Als je er geen hebt, maak een gratis account aan.
- Een app-registratie voor uw API
Optie 1: Maken van sjabloon (snelste)
Gebruik de ASP.NET Core-sjabloon met ingebouwde Microsoft Entra verificatie om een beveiligd API-project te maken.
1. Het project maken
Voer de volgende opdrachten uit om een nieuw web-API-project te maken met verificatie met één organisatie en navigeer naar de projectmap:
dotnet new webapi --auth SingleOrg --name MyWebApi
cd MyWebApi
2. App-registratie configureren
Vervang de waarden van de tijdelijke aanduidingen in appsettings.json door de registratiegegevens van uw Microsoft Entra-app:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id"
}
}
3. Voer de API uit
Start de toepassing:
dotnet run
Uw API is nu beveiligd op https://localhost:5001.
Gereed! Aanvragen vereisen nu een geldig toegangstoken.
Optie 2: Toevoegen aan bestaande web-API
Als u al een ASP.NET Core web-API hebt, voegt u Microsoft Entra verificatie toe met de volgende stappen.
1. NuGet-pakket installeren
Voeg het Microsoft.Identity.Web NuGet-pakket aan uw project toe.
dotnet add package Microsoft.Identity.Web
2. Verificatie configureren in Program.cs
Registreer de verificatie- en autorisatieservices in de opstartpijplijn van uw app. Met de volgende code configureert u JWT Bearer-verificatie met Microsoft Entra validatie:
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. Configuratie toevoegen aan appsettings.json
Voeg de sectie Microsoft Entra configuratie toe met uw tenant- en toepassingsgegevens. Stel het logboekregistratieniveau voor Microsoft.Identity.Web in op Information om problemen met tokenvalidatie op te lossen:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Identity.Web": "Information"
}
}
}
4. Uw API-eindpunten beveiligen
Pas het [Authorize] kenmerk toe op controllers of acties waarvoor een geldig toegangstoken is vereist.
Verificatie vereisen voor alle eindpunten:
De volgende controller vereist een geldig toegangstoken voor alle acties en laat zien hoe u toegang hebt tot gebruikersclaims:
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"
});
}
}
Specifieke bereiken vereisen:
Gebruik het [RequiredScope] kenmerk om gedetailleerde machtigingen af te dwingen voor afzonderlijke acties:
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. Uitvoeren en testen
Start de toepassing en controleer of niet-geverifieerde aanvragen worden geweigerd:
dotnet run
Test met een hulpprogramma zoals Postman of curl. Een niet-geverifieerde aanvraag retourneert 401 Unauthorized:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://localhost:5001/api/weatherforecast
Gelukt! Uw API valideert nu bearer-tokens.
Instellen van app-registratie
Voordat uw API tokens kan valideren, hebt u een Microsoft Entra app-registratie nodig. Volg deze stappen in de Azure-portal.
1. Registreer uw API
- Meld u aan bij de Azure-portal
- Navigeer naar Microsoft Entra ID>App-registraties>Nieuwe registratie
- Voer een naam in (bijvoorbeeld 'Mijn web-API')
- Eén tenant selecteren (meest voorkomende voor API's)
- Er is geen omleidings-URI nodig voor API's
- Klik op Registreren
2. Een API-bereik beschikbaar maken
Definieer de machtigingen (bereiken) die client-apps kunnen aanvragen bij het aanroepen van uw API.
- Ga in de registratie van uw API-app naar Een API beschikbaar maken
- Klik op Een bereik toevoegen
- Accepteer de standaard-URI van de toepassings-id of pas deze aan (bijvoorbeeld
api://your-api-client-id) - Een bereik toevoegen:
-
Bereiknaam:
access_as_user - Wie kan toestemming geven: Beheerders en gebruikers
- Weergavenaam van beheerderstoestemming: "Mijn web-API openen"
- Beschrijving van beheerderstoestemming: "Hiermee kan de app namens de aangemelde gebruiker toegang krijgen tot de web-API"
-
Bereiknaam:
- Klik op Bereik toevoegen
3. Noteer de toepassings-id
Kopieer de Applicatie-ID (client) van de overzichtspagina van de app-registratie. Deze waarde is uw ClientId in appsettings.json.
Een registratie van een client-app maken (voor testen)
Als u uw beveiligde API wilt testen, registreert u een afzonderlijke clienttoepassing die tokens verkrijgt en de API aanroept.
1. Een clienttoepassing registreren
- Maak in Microsoft Entra ID>App-registraties een andere registratie
- Geef deze een naam (bijvoorbeeld 'Mijn API-client')
- Accounttypen selecteren
- Omleidings-URI toevoegen:
https://localhost:7000/signin-oidc(als het een web-app is) - Klik op Registreren
2. API-machtigingen verlenen
Geef de clientapplicatie toestemming om uw API aan te roepen met de scopes die u hebt gedefinieerd.
- Ga in de registratie van de client-app naar API-machtigingen
- Klik op Een machtiging> toevoegenmijn API's
- Selecteer uw API-registratie
- Controleer de
access_as_userscope - Klik op Machtigingen toevoegen
- Klik op Beheerderstoestemming verlenen (indien nodig)
3. Maak een clientgeheim (voor vertrouwelijke clients)
Als uw client-app wordt uitgevoerd op een server (geen browser of mobiel apparaat), maakt u een clientgeheim voor verificatie.
- Ga naar Certificaten en geheimen
- Klik op Nieuw clientgeheim
- Een beschrijving en verlooptijd toevoegen
- Klik op Toevoegen
- Kopieer de geheime waarde onmiddellijk . U kunt deze niet meer zien
Uw beveiligde API testen
Controleer of uw API tokens correct valideert door geverifieerde aanvragen te verzenden.
Postman gebruiken
Stel OAuth 2.0-verificatie in Postman in om een token te verkrijgen en uw API aan te roepen.
- Een nieuwe aanvraag maken in Postman
- OAuth 2.0-verificatie instellen:
- Toekenningstype: Autorisatiecode (voor gebruikerscontext) of clientreferenties (voor app-context)
-
Verificatie-URL:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize -
URL van toegangstoken:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token - Client-id: De client-id van uw client-app
- Clientgeheim: Het geheim van uw client-app
-
Reikwijdte:
api://your-api-client-id/access_as_user
- Klik op Nieuw toegangstoken ophalen
- Het token gebruiken om uw API aan te roepen
Code gebruiken (C#-voorbeeld)
In het volgende voorbeeld wordt MSAL.NET gebruikt om een token te verkrijgen met de clientreferentiestroom en de beveiligde API aan te roepen:
// 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");
Algemene configuratieopties
Microsoft. Identity.Web ondersteunt verschillende configuratiepatronen voor verschillende scenario's.
Specifieke bereiken in configuratie vereisen
In plaats van het [RequiredScope] kenmerk te gebruiken, kunt u de vereiste toepassingsgebieden globaal configureren in appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id",
"Scopes": "access_as_user"
}
}
Tokens van meerdere tenants accepteren
Als u tokens van een Microsoft Entra tenant wilt accepteren, stelt u TenantId in op common:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "common",
"ClientId": "your-api-client-id"
}
}
Tokenvalidatie configureren
Als uw API downstream-API's aanroept (zoals Microsoft Graph), schakelt u het verkrijgen van tokens in en configureert u een tokencache:
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi() // If your API calls other APIs
.AddInMemoryTokenCaches();
Volgende stappen
Nu u een beveiligde API hebt, bekijkt u deze onderwerpen:
- Downstream-API's oproepen - Microsoft Graph of andere API's oproepen namens gebruikers.
- Tokencache configureren - Strategieën voor productiecache voor OBO-scenario's.
- Langlopende processen - Achtergrondtaken verwerken met OBO-tokens.
- Implementeer achter een API-gateway - Azure API Management, Azure Front Door, Application Gateway.
Troubleshooting
401 Niet geautoriseerd
Probleem: API retourneert 401 zelfs met een token.
Mogelijke oorzaken:
- Token-gebruiker (
audclaim) komt niet overeen met uw APIClientId - De token is verlopen
- Token is voor de verkeerde tenant
- Vereist bereik ontbreekt
Oplossing: Decoder het token op jwt.ms en controleer de claims. Zie Logboekregistratie en diagnostische gegevens voor gedetailleerde probleemoplossing.
AADSTS50013: Ongeldige handtekening
Probleem: Validatie van tokenhandtekening mislukt.
Oplossing: Zorg ervoor dat uw TenantId en ClientId juist zijn. Het token moet worden uitgegeven door de verwachte instantie. Schakel gedetailleerde logboekregistratie in om validatiefouten te bekijken.
Scopes niet gevonden in de token
Probleem:[RequiredScope] kenmerk mislukt.
Solution:
- Controleer of de client-app toestemming heeft voor het toepassingsbereik
- Controleren of beheerderstoestemming is verleend (indien nodig)
- Zie Autorisatiehandleiding voor volledige scope-validatiepatronen.
- Controleer of het bereik wordt aangevraagd bij het verkrijgen van het token (bijvoorbeeld
api://your-api/.defaultof specifieke bereiken)
Zie meer:Handleiding voor het oplossen van problemen met web-API's
Verwante inhoud
- Autorisatiehandleiding - RequiredScope-kenmerk, autorisatiebeleid, tenantfilters
- Aanpassingshandleiding - JWT Bearer-opties en validatieparameters configureren
- Logboekregistratie en diagnostische gegevens - Verificatieproblemen met correlatie-id's oplossen
- Zelfstudie over beveiligde web-API
- API-voorbeelden