Hızlı Başlangıç: Microsoft kimlik platformu ile ASP.NET Core web API'sini koruma
Hoş geldiniz! Bu muhtemelen beklediğiniz sayfa değildir. Bir düzeltme üzerinde çalışırken bu bağlantı sizi doğru makaleye götürmelidir:
Hızlı Başlangıç: Microsoft kimlik platformu tarafından korunan bir ASP.NET Core web API'sini çağırma
Bu sorun için özür dileriz ve bu sorunu çözmek için çalışırken sabrınızı takdir ediyoruz.
Aşağıdaki hızlı başlangıçta, yetkili hesaplara kaynak erişimini kısıtlamayı göstermek için ASP.NET Core web API'si kod örneği kullanılmaktadır. Örnek, herhangi bir Microsoft Entra kuruluşundaki kişisel Microsoft hesaplarının ve hesaplarının yetkisini destekler.
Önkoşullar
- Etkin aboneliği olan Azure hesabı. Ücretsiz hesap oluşturun.
- Microsoft Entra kiracısı
- .NET 6.0 SDK'sının en düşük gereksinimi
- Visual Studio 2022 veya Visual Studio Code
1. Adım: Uygulamayı kaydetme
İlk olarak, web API'sini Microsoft Entra kiracınıza kaydedin ve aşağıdaki adımları izleyerek bir kapsam ekleyin:
- Microsoft Entra yönetim merkezinde en az Bir Uygulama Yöneticisi olarak oturum açın.
- Kimlik>Uygulamaları'na> göz atın Uygulama kayıtları.
- Yeni kayıt öğesini seçin.
- Ad alanına uygulama için bir ad girin. Örneğin, AspNetCoreWebApi-Quickstart girin. Uygulamanın kullanıcıları bu adı görür ve daha sonra değiştirilebilir.
- Kaydet'i seçin.
- Yönet'in altında API'yi>kullanıma sunma Kapsam ekle'yi seçin. Uygulama Kimliği URI'si için Kaydet ve devam et'i seçip aşağıdaki ayrıntıları girerek varsayılan değeri kabul edin:
- Kapsam adı:
access_as_user
- Kimler onay verebilir?: Yöneticiler ve kullanıcılar
- Yönetici onayı görünen adı:
Access AspNetCoreWebApi-Quickstart
- Yönetici onayı açıklaması:
Allows the app to access AspNetCoreWebApi-Quickstart as the signed-in user.
- Kullanıcı onayı görünen adı:
Access AspNetCoreWebApi-Quickstart
- Kullanıcı onayı açıklaması:
Allow the application to access AspNetCoreWebApi-Quickstart on your behalf.
- Durum: Etkin
- Kapsam ekleme işlemini tamamlamak için Kapsam ekle'yi seçin.
2. Adım: ASP.NET Core projesini indirme
GitHub'dan ASP.NET Core çözümünü indirin.
Not
Kod örneği şu anda ASP.NET Core 3.1'i hedeflemektedir. Örnek, .NET Core 6.0 kullanacak şekilde güncelleştirilebilir ve aşağıdaki adımlarda ele alınmıştır: Örnek kodu ASP.NET Core 6.0'a güncelleştirin. Bu hızlı başlangıç yakın gelecekte kullanımdan kaldırılacak ve .NET 6.0 kullanacak şekilde güncelleştirilecektir.
3. Adım: ASP.NET Core projesini yapılandırma
Bu adımda, örnek kod daha önce oluşturulan uygulama kaydıyla çalışacak şekilde yapılandırılacaktır.
Windows'ta yol uzunluğu sınırlamalarından kaynaklanan hataları önlemek için .zip dosyasını diskin köküne yakın bir yerel klasöre ayıklayın. Örneğin, C:\Azure-Samples dizinine ayıklayın.
Çözümü kod düzenleyicinizdeki webapi klasöründe açın.
appsettings.json,ve
TenantId
değerleriniClientId
değiştirin."ClientId": "Enter_the_Application_Id_here", "TenantId": "Enter_the_Tenant_Info_Here"
Enter_the_Application_Id_Here
, kayıtlı uygulamanın uygulama (istemci) kimliğidir.- değerini aşağıdakilerden biriyle değiştirin
Enter_the_Tenant_Info_Here
:- Uygulama yalnızca bu kuruluş dizinindeki Hesapları destekliyorsa, bu değeri dizin (kiracı) kimliği (GUID) veya kiracı adıyla (örneğin,
contoso.onmicrosoft.com
) değiştirin. Dizin (kiracı) kimliği, uygulamanın Genel Bakış sayfasında bulunabilir. - Uygulama herhangi bir kuruluş dizinindeki Hesapları destekliyorsa, bu değeri ile
organizations
değiştirin. - Uygulama Tüm Microsoft hesabı kullanıcılarını destekliyorsa, bu değeri olarak
common
bırakın.
- Uygulama yalnızca bu kuruluş dizinindeki Hesapları destekliyorsa, bu değeri dizin (kiracı) kimliği (GUID) veya kiracı adıyla (örneğin,
Bu hızlı başlangıç için appsettings.json dosyasındaki diğer değerleri değiştirmeyin.
4. Adım: Örnek kodu ASP.NET Core 6.0'a güncelleştirme
Bu kod örneğini ASP.NET Core 6.0 hedefine güncelleştirmek için şu adımları izleyin:
- webapi.csproj dosyasını açın
- Aşağıdaki satırı kaldırın:
<TargetFramework>netcoreapp3.1</TargetFramework>
- Yerine aşağıdaki satırı ekleyin:
<TargetFramework>netcoreapp6.0</TargetFramework>
Bu adım, örneğin .NET Core 6.0 çerçevesini hedeflediğinden emin olur.
5. Adım: Örneği çalıştırma
Bir terminal açın ve dizini proje klasörüne değiştirin.
cd webapi
Çözümü oluşturmak için aşağıdaki komutu çalıştırın:
dotnet run
Derleme başarılı olursa aşağıdaki çıkış görüntülenir:
Building...
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
...
Örnek nasıl çalışır?
Başlangıç sınıfı
Microsoft.AspNetCore.Authentication ara yazılımı, barındırma işlemi başladığında yürütülen bir Startup
sınıf kullanır. ConfigureServices
yöntemindeAddMicrosoftIdentityWebApi
, Microsoft.Identity.Web tarafından sağlanan uzantı yöntemi çağrılır.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
}
yöntemi hizmeti AddAuthentication()
JwtBearer tabanlı kimlik doğrulaması ekleyecek şekilde yapılandırır.
içeren .AddMicrosoftIdentityWebApi
satır, web API'sine Microsoft kimlik platformu yetkilendirmesini ekler. Ardından Microsoft kimlik platformu tarafından verilen erişim belirteçlerini appsettings.json yapılandırma dosyasının bölümündeki bilgilere AzureAD
göre doğrulayacak şekilde yapılandırılır:
appsettings.json anahtarı | Açıklama |
---|---|
ClientId |
Kayıtlı uygulamanın uygulama (istemci) kimliği. |
Instance |
Kullanıcının kimlik doğrulaması için güvenlik belirteci hizmeti (STS) uç noktası. Bu değer genellikle https://login.microsoftonline.com/ Azure genel bulutunu gösteren değeridir. |
TenantId |
Kiracınızın veya kiracı kimliğinin (GUID) adı ya da iş veya common okul hesapları ya da Microsoft kişisel hesapları olan kullanıcılarla oturum açmak için. |
Configure()
yöntemi, app.UseAuthentication()
adlandırılmış işlevlerini etkinleştiren ve app.UseAuthorization()
adlı iki önemli yöntem içerir:
// The runtime calls this method. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// more code
app.UseAuthentication();
app.UseAuthorization();
// more code
}
Denetleyiciyi, denetleyicinin yöntemini veya Razor sayfasını koruma
Denetleyici veya denetleyici yöntemleri özniteliği kullanılarak [Authorize]
korunabilir. Bu öznitelik, yalnızca kimliği doğrulanmış kullanıcılara izin vererek denetleyiciye veya yöntemlere erişimi kısıtlar. Kullanıcının kimliği doğrulanmamışsa denetleyiciye erişmek için bir kimlik doğrulama sınaması başlatılabilir.
namespace webapi.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
Denetleyicide kapsamın doğrulanması
API'deki kod, kullanarak HttpContext.VerifyUserHasAnyAcceptedScope> (scopeRequiredByApi);
gerekli kapsamların belirteçte olduğunu doğrular:
namespace webapi.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
// The web API will only accept tokens 1) for users, and 2) having the "access_as_user" scope for this API
static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);
// some code here
}
}
}
Yardım ve destek
Yardıma ihtiyacınız varsa, bir sorunu bildirmek veya destek seçenekleriniz hakkında bilgi edinmek istiyorsanız bkz . Geliştiriciler için yardım ve destek.
Sonraki adımlar
Aşağıdaki GitHub deposu, ASP.NET Core web API kodu örnek yönergelerini ve aşağıdakilerin nasıl başarıldığını gösteren diğer örnekleri içerir:
- Yeni bir ASP.NET Core web API'sine kimlik doğrulaması ekleyin.
- Masaüstü uygulamasından web API'sini çağırın.
- Microsoft Graph ve diğer Microsoft API'leri gibi aşağı akış API'lerini çağırabilirsiniz.