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 common
bırakılabilir. Farklı değerler:
- GUID (Kiracı Kimliği = Dizin Kimliği)
common
herhangi bir kuruluş ve kişisel hesap olabilirorganizations
herhangi bir kuruluş olabilirconsumers
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();
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin