Korumalı web API'si: Kod yapılandırması

Korumalı web API'nizin kodunu yapılandırmak için şunları anlayın:

  • API'leri korumalı olarak tanımlayan şey.
  • Taşıyıcı belirteci yapılandırma.
  • Belirteci doğrulama.

ASP.NET ve ASP.NET Core API'lerini korumalı olarak tanımlayan nedir?

Web uygulamaları gibi ASP.NET ve ASP.NET Core web API'leri de denetleyici eylemlerine [Authorize] özniteliği eklendiği için korunur. Denetleyici eylemleri yalnızca API yetkili bir kimlikle çağrıldığında çağrılabilir.

Aşağıdaki soruları göz önünde bulundurun:

  • Yalnızca bir uygulama web API'sini çağırabilir. API, onu çağıran uygulamanın kimliğini nasıl biliyor?
  • Uygulama API'yi bir kullanıcı adına çağırırsa kullanıcının kimliği nedir?

Taşıyıcı belirteci

Uygulama çağrıldığında üst bilgide ayarlanan taşıyıcı belirteci, uygulama kimliği hakkındaki bilgileri tutar. Ayrıca, web uygulaması bir daemon uygulamasından hizmetten hizmete çağrıları kabul etmediği sürece kullanıcı hakkında bilgi de tutar.

.NET için Microsoft Authentication Library (MSAL.NET) ile belirteç aldıktan sonra API'yi çağıran bir istemciyi gösteren bir C# kod örneği aşağıda verilmiştir:

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

Önemli

İstemci uygulaması, web API'sinin Microsoft kimlik platformu taşıyıcı belirtecini istemektedir. API, belirteci doğrulamalı ve içerdiği talepleri görüntülemesi gereken tek uygulamadır. İstemci uygulamaları hiçbir zaman belirteçlerdeki talepleri incelemeyi denememelidir.

Gelecekte web API'sinin belirtecin şifrelenmesini gerektirebilir. Bu gereksinim, erişim belirteçlerini görüntüleyebilen istemci uygulamalarına erişimi engeller.

JwtBearer yapılandırması

Bu bölümde taşıyıcı belirtecinin nasıl yapılandırıldığı açıklanmaktadır.

Yapılandırma dosyası

Yalnızca tek bir kiracıdan (iş kolu uygulaması) erişim belirteçlerini kabul etmek istiyorsanız belirtmeniz TenantId gerekir. Aksi takdirde, olarak commonbırakılabilir. Farklı değerler:

  • GUID (Kiracı Kimliği = Dizin Kimliği)
  • common herhangi bir kuruluş ve kişisel hesap olabilir
  • organizations herhangi bir kuruluş olabilir
  • consumers Microsoft kişisel hesapları
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Web API'si için özel Uygulama Kimliği URI'si kullanma

Azure portalı tarafından önerilen varsayılan Uygulama Kimliği URI'sini kabul ettiyseniz, hedef kitleyi belirtmeniz gerekmez (bkz . Uygulama Kimliği URI'si ve kapsamları). Aksi takdirde, değeri web API'niz için Uygulama Kimliği URI'si olan bir Audience özellik ekleyin. Bu genellikle ile api://başlar.

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

Kod başlatma

[Authorize] özniteliğine sahip bir denetleyici eyleminde bir uygulama çağrıldığında ASP.NET ve ASP.NET Core, Yetkilendirme üst bilgisinin taşıyıcı belirtecinden erişim belirtecini ayıklar. Erişim belirteci daha sonra .NET için Microsoft IdentityModel Uzantılarını çağıran JwtBearer ara yazılımına iletilir.

Microsoft.Identity.Web

Microsoft, ASP.NET Core ile bir web API'sini geliştirirken Microsoft.Identity.Web NuGet paketini kullanmanızı önerir.

Microsoft.Identity.Web ASP.NET Core, kimlik doğrulama ara yazılımı ve .NET için Microsoft Authentication Library (MSAL) arasında tutkal sağlar. Daha net ve daha güçlü bir geliştirici deneyimi sağlar ve Microsoft kimlik platformu ve Azure AD B2C'nin gücünden yararlanıyor.

.NET 6.0 için ASP.NET

Microsoft.Identity.Web kullanan yeni bir web API'si projesi oluşturmak için .NET 6.0 CLI veya Visual Studio'da bir proje şablonu kullanın.

Dotnet core CLI

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

Visual Studio - Visual Studio'da web API'si projesi oluşturmak için Dosya>Yeni>Proje>ASP.NET Core Web API'sini seçin.

Hem .NET CLI hem de Visual Studio proje şablonları, bu kod parçacığına benzer bir Program.cs dosyası oluşturur. yönergesini ve kimlik doğrulaması ve yetkilendirmeyi içeren satırların kullanıldığına dikkat edin Microsoft.Identity.Web .

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