Share via


Skyddat webb-API: Kodkonfiguration

Förstå hur du konfigurerar koden för ditt skyddade webb-API:

  • Vad definierar API:er som skyddade.
  • Så här konfigurerar du en ägartoken.
  • Verifiera token.

Vad definierar ASP.NET och ASP.NET Core API:er som skyddade?

Precis som webbappar skyddas ASP.NET och ASP.NET Core-webb-API:er eftersom deras kontrollantåtgärder är prefix med attributet [Auktorisera]. Kontrollantåtgärderna kan bara anropas om API:et anropas med en auktoriserad identitet.

Överväg följande frågor:

  • Endast en app kan anropa ett webb-API. Hur känner API:et till identiteten för den app som anropar den?
  • Vad är användarens identitet om appen anropar API:et för en användares räkning?

Ägartoken

Ägartoken som anges i huvudet när appen anropas innehåller information om appidentiteten. Den innehåller också information om användaren såvida inte webbappen accepterar tjänst-till-tjänst-anrop från en daemon-app.

Här är ett C#-kodexempel som visar en klient som anropar API:et när den har hämtat en token med Microsoft Authentication Library för .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);

Viktigt!

Ett klientprogram begär ägartoken till Microsofts identitetsplattform för webb-API:et. API:et är det enda program som ska verifiera token och visa de anspråk som den innehåller. Klientappar bör aldrig försöka inspektera anspråken i token.

I framtiden kan webb-API:et kräva att token krypteras. Det här kravet skulle förhindra åtkomst för klientappar som kan visa åtkomsttoken.

JwtBearer-konfiguration

I det här avsnittet beskrivs hur du konfigurerar en ägartoken.

Konfigurationsfil

Du behöver bara ange om TenantId du vill acceptera åtkomsttoken från en enda klientorganisation (verksamhetsspecifik app). Annars kan den lämnas som common. De olika värdena kan vara:

  • Ett GUID (klient-ID = katalog-ID)
  • common kan vara valfri organisation och personliga konton
  • organizations kan vara vilken organisation som helst
  • consumers är Microsofts personliga konton
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Använda en anpassad app-ID-URI för ett webb-API

Om du har accepterat den standardapp-ID-URI som föreslås av Azure-portalen behöver du inte ange målgruppen (se Program-ID-URI och omfång). Annars lägger du till en Audience egenskap vars värde är app-ID-URI:n för ditt webb-API. Detta börjar vanligtvis med api://.

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

Kodinitiering

När en app anropas för en kontrollantåtgärd som innehåller ett [Auktorisera] -attribut extraherar ASP.NET och ASP.NET Core åtkomsttoken från auktoriseringshuvudets ägartoken. Åtkomsttoken vidarebefordras sedan till JwtBearer-mellanprogrammet, som anropar Microsoft IdentityModel Extensions för .NET.

Microsoft.Identity.Web

Microsoft rekommenderar att du använder NuGet-paketet Microsoft.Identity.Web när du utvecklar ett webb-API med ASP.NET Core.

Microsoft.Identity.Web tillhandahåller limmet mellan ASP.NET Core, mellanprogrammet för autentisering och Microsoft Authentication Library (MSAL) för .NET. Det ger en tydligare och mer robust utvecklarupplevelse och utnyttjar kraften i Microsofts identitetsplattform och Azure AD B2C.

ASP.NET för .NET 6.0

Om du vill skapa ett nytt webb-API-projekt som använder Microsoft.Identity.Web använder du en projektmall i .NET 6.0 CLI eller Visual Studio.

Dotnet core CLI

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

Visual Studio – Om du vill skapa ett webb-API-projekt i Visual Studio väljer du Fil>nytt>projekt>ASP.NET Core Web API.

Både .NET CLI- och Visual Studio-projektmallarna skapar en Program.cs fil som liknar det här kodfragmentet. Observera Microsoft.Identity.Web att du använder direktivet och raderna som innehåller autentisering och auktorisering.

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();