Chráněné webové rozhraní API: Konfigurace kódu

Pokud chcete nakonfigurovat kód pro chráněné webové rozhraní API, seznamte se s následujícími informacemi:

  • Co definuje rozhraní API jako chráněná.
  • Jak nakonfigurovat nosný token
  • Postup ověření tokenu

Co definuje ASP.NET a ASP.NET základní rozhraní API jako chráněná?

Podobně jako u webových aplikací jsou chráněná webová rozhraní API ASP.NET a ASP.NET Core, protože jejich akce kontroleru mají předponu atributu [Authorize]. Akce kontroleru je možné volat pouze v případě, že se rozhraní API volá s autorizovanou identitou.

Zvažte následující otázky:

  • Webové rozhraní API může volat jenom aplikace. Jak rozhraní API zná identitu aplikace, která ji volá?
  • Pokud aplikace volá rozhraní API jménem uživatele, jaká je identita uživatele?

Nosný token

Nosný token nastavený v hlavičce při zavolání aplikace obsahuje informace o identitě aplikace. Obsahuje také informace o uživateli, pokud webová aplikace nepřijímá volání mezi službami z aplikace démona.

Tady je příklad kódu jazyka C#, který zobrazuje klienta volajícího rozhraní API po získání tokenu s knihovnou Microsoft Authentication Library pro .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);

Důležité

Klientská aplikace požaduje nosný token na platformu Microsoft Identity Platform pro webové rozhraní API. Rozhraní API je jediná aplikace, která by měla token ověřit a zobrazit deklarace identity, které obsahuje. Klientské aplikace by se nikdy neměly pokoušet kontrolovat deklarace identity v tokenech.

V budoucnu může webové rozhraní API vyžadovat šifrování tokenu. Tento požadavek by zabránil přístupu klientským aplikacím, které můžou zobrazit přístupové tokeny.

Konfigurace JwtBearer

Tato část popisuje, jak nakonfigurovat nosný token.

Konfigurační soubor

Musíte zadat TenantId pouze v případě, že chcete přijímat přístupové tokeny z jednoho tenanta (obchodní aplikace). V opačném případě může být ponechán jako common. Různé hodnoty můžou být následující:

  • IDENTIFIKÁTOR GUID (ID tenanta = ID adresáře)
  • common může být jakýkoliv organizační a osobní účet.
  • organizations může být libovolná organizace.
  • consumers jsou osobní účty Microsoft.
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Použití vlastního identifikátoru URI ID aplikace pro webové rozhraní API

Pokud jste přijali výchozí identifikátor URI ID aplikace navržený na webu Azure Portal, nemusíte zadávat cílovou skupinu (viz identifikátor URI a rozsahy ID aplikace). V opačném případě přidejte Audience vlastnost, jejíž hodnotou je identifikátor URI ID aplikace pro webové rozhraní API. Obvykle začíná na api://.

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

Inicializace kódu

Když je aplikace volána v akci kontroleru, která obsahuje atribut [Authorize], ASP.NET a ASP.NET Core extrahuje přístupový token z nosný token hlavičky autorizace. Přístupový token se pak předá do middlewaru JwtBearer, který volá rozšíření Microsoft IdentityModel pro .NET.

Microsoft.Identity.Web

Microsoft doporučuje použít balíček NuGet Microsoft.Identity.Web při vývoji webového rozhraní API s ASP.NET Core.

Microsoft.Identity.Web poskytuje připevnění mezi ASP.NET Core, middlewarem ověřování a knihovnou MSAL (Microsoft Authentication Library) pro .NET. Umožňuje jasnější a robustnější vývojářské prostředí a využívá sílu platformy Microsoft Identity Platform a Azure AD B2C.

ASP.NET pro .NET 6.0

Pokud chcete vytvořit nový projekt webového rozhraní API, který používá Microsoft.Identity.Web, použijte šablonu projektu v rozhraní příkazového řádku .NET 6.0 nebo sadě Visual Studio.

Rozhraní příkazového řádku Dotnet Core

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

Visual Studio – Pokud chcete vytvořit projekt webového rozhraní API v sadě Visual Studio, vyberte File>New>Project>ASP.NET Core Web API.

Šablony projektů .NET CLI i sady Visual Studio vytvoří soubor Program.cs , který bude vypadat podobně jako tento fragment kódu. Všimněte si Microsoft.Identity.Web použití direktivy a řádků obsahujících ověřování a autorizaci.

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