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

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:

  1. Microsoft Entra yönetim merkezinde en az Uygulama Yönetici istrator olarak oturum açın.
  2. Kimlik>Uygulamaları'na> göz atın Uygulama kayıtları.
  3. Yeni kayıt öğesini seçin.
  4. 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.
  5. Kaydet'i seçin.
  6. 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önetici ve kullanıcılar
  • onay görünen adını Yönetici: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
  1. 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.

  1. 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.

  2. Çözümü kod düzenleyicinizdeki webapi klasöründe açın.

  3. appsettings.json,veTenantId değerlerini ClientIddeğ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 organizationsdeğiştirin.
      • Uygulama Tüm Microsoft hesabı kullanıcılarını destekliyorsa, bu değeri olarak commonbırakın.

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:

  1. webapi.csproj dosyasını açın
  2. Aşağıdaki satırı kaldırın:
<TargetFramework>netcoreapp3.1</TargetFramework>
  1. 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

  1. Bir terminal açın ve dizini proje klasörüne değiştirin.

    cd webapi
    
  2. Çö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.