Védett webes API: Kódkonfiguráció

A védett webes API kódjának konfigurálásához tekintse meg a következőket:

  • Mi határozza meg az API-kat védettként.
  • Tulajdonosi jogkivonat konfigurálása.
  • A jogkivonat érvényesítése.

Mi határozza meg a ASP.NET és ASP.NET Core API-kat védettként?

A webalkalmazásokhoz hasonlóan a ASP.NET és ASP.NET Core webes API-k is védettek, mert a vezérlőműveleteik előtagja az [Engedélyezés] attribútum. A vezérlőműveletek csak akkor hívhatók meg, ha az API-t hitelesített identitással hívják meg.

A következő kérdéseket kell figyelembe venni:

  • Csak egy alkalmazás hívhat meg webes API-t. Honnan tudja az API a meghívó alkalmazás identitását?
  • Ha az alkalmazás egy felhasználó nevében hívja meg az API-t, mi a felhasználó identitása?

Tulajdonosi jogkivonat

Az alkalmazás meghívásakor a fejlécben beállított tulajdonosi jogkivonat az alkalmazás identitásával kapcsolatos információkat tárolja. Emellett információkat is tárol a felhasználóról, kivéve, ha a webalkalmazás nem fogad szolgáltatásközi hívásokat egy démonalkalmazásból.

Íme egy C#-kód példa, amely azt mutatja be, hogy egy ügyfél meghívja az API-t, miután jogkivonatot szerez be a Microsoft Authentication Library for .NET -hez (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);

Fontos

Az ügyfélalkalmazás a tulajdonosi jogkivonatot a webes API Microsoft Identitásplatform kéri le. Az API az egyetlen alkalmazás, amely ellenőriznie kell a jogkivonatot, és meg kell tekintenie a benne található jogcímeket. Az ügyfélalkalmazások soha ne próbáljanak jogkivonatokban megvizsgálni a jogcímeket.

A jövőben a webes API-nak szüksége lehet a jogkivonat titkosítására. Ez a követelmény megakadályozza a hozzáférési jogkivonatokat megtekintő ügyfélalkalmazások hozzáférését.

JwtBearer-konfiguráció

Ez a szakasz a tulajdonosi jogkivonat konfigurálását ismerteti.

Konfigurációs fájl

Csak akkor kell megadnia a TenantId hozzáférési jogkivonatokat, ha egyetlen bérlőből (üzletági alkalmazásból) szeretné elfogadni a hozzáférési jogkivonatokat. Ellenkező esetben a fájl a következőképpen maradhat: common. A különböző értékek lehetnek:

  • GUID (bérlőazonosító = címtárazonosító)
  • common lehet bármilyen szervezeti és személyes fiók
  • organizations bármely szervezet lehet
  • consumers Személyes Microsoft-fiókok
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Egyéni alkalmazásazonosító URI használata webes API-hoz

Ha elfogadta az Azure Portal által javasolt alapértelmezett alkalmazásazonosító URI-t, nem kell megadnia a célközönséget (lásd az alkalmazásazonosító URI-ját és hatóköreit). Ellenkező esetben adjon hozzá egy Audience tulajdonságot, amelynek értéke a webes API alkalmazásazonosítójának URI-ja. Ez általában a következővel api://kezdődik: .

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

Kód inicializálása

Amikor egy [Authorization] attribútumot tartalmazó vezérlőműveletre meghív egy alkalmazást, ASP.NET és ASP.NET Core kinyeri a hozzáférési jogkivonatot az Engedélyezési fejléc tulajdonosi jogkivonatából. A hozzáférési jogkivonat ezután a JwtBearer köztes szoftverbe kerül, amely a Microsoft IdentityModel Extensions for .NET-et hívja meg.

Microsoft.Identity.Web

A Microsoft azt javasolja, hogy használja a Microsoft.Identity.Web NuGet-csomagot, amikor webes API-t fejleszt ASP.NET Core-nal.

A Microsoft.Identity.Web biztosítja a kapcsolatot a ASP.NET Core, a hitelesítési köztes szoftver és a .NET-hez készült Microsoft Authentication Library (MSAL) között. Egyértelműbb, robusztusabb fejlesztői élményt tesz lehetővé, és kihasználja a Microsoft Identitásplatform és az Azure AD B2C előnyeit.

ASP.NET a .NET 6.0-hoz

A Microsoft.Identity.Web alkalmazást használó új webes API-projekt létrehozásához használjon egy projektsablont a .NET 6.0 CLI-ben vagy a Visual Studióban.

Dotnet core CLI

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

Visual Studio – Ha webes API-projektet szeretne létrehozni a Visual Studióban, válassza a File>New>Project>ASP.NET Core Web API lehetőséget.

A .NET CLI és a Visual Studio projektsablonjai is létrehoznak egy Program.cs fájlt, amely a kódrészlethez hasonlóan néz ki. Figyelje meg Microsoft.Identity.Web a hitelesítést és engedélyezést tartalmazó irányelveket és sorokat.

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