Delen via


Beveiligde web-API: codeconfiguratie

Van toepassing op: Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op werknemerstenants. Werknemerstenants (meer informatie)

Als u de code voor uw beveiligde web-API wilt configureren, begrijpt u het volgende:

  • Wat definieert API's als beveiligd.
  • Een Bearer-token configureren.
  • Het token valideren.

Geaccepteerde tokenversie

Het Microsoft-identiteitsplatform kan v1.0-tokens en v2.0-tokens uitgeven. Raadpleeg Access-tokens voor meer informatie over deze tokens.

De tokenversie die uw API kan accepteren, is afhankelijk van de selectie ondersteunde accounttypen wanneer u de registratie van uw web-API-toepassing maakt in Azure Portal.

  • Als de waarde van ondersteunde accounttypenAccounts in een organisatiedirectory en persoonlijke Microsoft-accounts (zoals Skype, Xbox, Outlook.com) is, moet de geaccepteerde tokenversie v2.0 zijn.
  • Anders kan de geaccepteerde tokenversie v1.0 zijn.

Nadat u de toepassing hebt gemaakt, kunt u de geaccepteerde tokenversie bepalen of wijzigen door de volgende stappen uit te voeren:

  1. Selecteer uw app in het Microsoft Entra-beheercentrum en selecteer vervolgens Manifest.
  2. Zoek de eigenschap accessTokenAcceptedVersion in het manifest.
  3. De waarde geeft aan Microsoft Entra op welke tokenversie de web-API accepteert.
    • Als de waarde 2 is, accepteert de web-API v2.0-tokens.
    • Als de waarde null is, accepteert de web-API v1.0-tokens.
  4. Als u de tokenversie hebt gewijzigd, selecteert u Opslaan.

De web-API geeft aan welke tokenversie deze accepteert. Wanneer een client een token voor uw web-API aanvraagt vanuit het Microsoft-identiteitsplatform, krijgt de client een token dat aangeeft welke tokenversie de web-API accepteert.

Wat definieert ASP.NET en ASP.NET Core-API's als beveiligd?

Net als web-apps worden ASP.NET en ASP.NET Core-web-API's beveiligd omdat hun controlleracties worden voorafgegaan door het kenmerk [Autoriseren]. De controlleracties kunnen alleen worden aangeroepen als de API wordt aangeroepen met een geautoriseerde identiteit.

Denk na over de volgende vragen:

  • Alleen een app kan een web-API aanroepen. Hoe weet de API de identiteit van de app die deze aanroept?
  • Als de app de API aanroept namens een gebruiker, wat is de identiteit van de gebruiker?

Bearer-token

Het bearer-token dat is ingesteld in de header wanneer de app wordt aangeroepen, bevat informatie over de app-identiteit. Het bevat ook informatie over de gebruiker, tenzij de web-app service-naar-service-aanroepen van een daemon-app accepteert.

Hier volgt een C#-codevoorbeeld met een client die de API aanroept nadat er een token is verkregen met de Microsoft Authentication Library voor .NET (MSAL.NET):

var scopes = new[] {$"api://.../access_as_user"};
var result = await app.AcquireToken(scopes)
                      .ExecuteAsync();

httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);

Belangrijk

Een clienttoepassing vraagt het Bearer-token aan bij het Microsoft Identity Platform voor de web-API. De API is de enige toepassing die het token moet verifiëren en de claims moet weergeven die het bevat. Client-apps mogen nooit proberen de claims in tokens te inspecteren.

In de toekomst vereist de web-API mogelijk dat het token wordt versleuteld. Deze vereiste voorkomt toegang voor client-apps die toegangstokens kunnen bekijken.

JwtBearer-configuratie

In deze sectie wordt beschreven hoe u een Bearer-token configureert.

Configuratiebestand

U moet de TenantId enige opgeven als u toegangstokens van één tenant (Line-Of-Business-app) wilt accepteren. Anders kan het overblijven als common. De verschillende waarden kunnen zijn:

  • Een GUID (tenant-id = map-id)
  • common kan elke organisatie en persoonlijke accounts zijn
  • organizations kan elke organisatie zijn
  • consumers zijn persoonlijke Microsoft-accounts
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Een aangepaste URI voor app-id's gebruiken voor een web-API

Als u de standaard-app-id-URI hebt geaccepteerd die door Azure Portal wordt voorgesteld, hoeft u de doelgroep niet op te geven. Voeg anders een Audience eigenschap toe waarvan de waarde de app-id-URI voor uw web-API is. Dit begint meestal met api://.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common",
    "Audience": "Enter_the_Application_ID_URI_here"
  },
}

Initialisatie van code

Wanneer een app wordt aangeroepen op een controlleractie met een kenmerk [Autoriseren] , ASP.NET en ASP.NET Core het toegangstoken uit het Bearer-token van de Autorisatie-header extraheren. Het toegangstoken wordt vervolgens doorgestuurd naar de JwtBearer-middleware, die Microsoft IdentityModel Extensions voor .NET aanroept.

Microsoft.Identity.Web

Microsoft raadt u aan het NuGet-pakket Microsoft.Identity.Web te gebruiken bij het ontwikkelen van een web-API met ASP.NET Core.

Microsoft.Identity.Web biedt de lijm tussen ASP.NET Core, de verificatie-middleware en de Microsoft Authentication Library (MSAL) voor .NET. Het biedt een duidelijkere, robuustere ontwikkelaarservaring en maakt gebruik van de kracht van het Microsoft Identity Platform en Azure AD B2C.

ASP.NET voor .NET 6.0

Als u een nieuw web-API-project wilt maken dat gebruikmaakt van Microsoft.Identity.Web, gebruikt u een projectsjabloon in de .NET 6.0 CLI of Visual Studio.

Dotnet core CLI

# Create new web API that uses Microsoft.Identity.Web
dotnet new webapi --auth SingleOrg

Visual Studio: als u een web-API-project wilt maken in Visual Studio, selecteert u >

Zowel de .NET CLI- als de Visual Studio-projectsjablonen maken een Program.cs-bestand dat lijkt op dit codefragment. Let op Microsoft.Identity.Web het gebruik van richtlijn en de regels die verificatie en autorisatie bevatten.

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();