Hızlı Başlangıç: ASP.NET Core web API'sini Microsoft kimlik platformu ile koruma

Hoş geldiniz! Bu büyük olasılıkla 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ıç:ASP.NET Core web API'sini koruma

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 bir ASP.NET Core web API'si kod örneği kullanılmaktadır. Örnek, herhangi bir Azure Active Directory (Azure AD) kuruluşunda kişisel Microsoft hesaplarının ve hesaplarının yetkisini destekler.

Önkoşullar

1. Adım: Uygulamayı kaydetme

İlk olarak, web API'sini Azure AD kiracınıza kaydedin ve aşağıdaki adımları izleyerek bir kapsam ekleyin:

  1. Azure Portal’ında oturum açın.
  2. Birden çok kiracıya erişim varsa, uygulamanın kaydedildiği kiracıya geçmek için üst menüdeki Dizinler + abonelikler filtresini kullanın.
  3. Azure Active Directory'yi bulun ve seçin.
  4. Yönet'in altında Uygulama kayıtları>Yeni kayıt'ı seçin.
  5. 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.
  6. Kaydet’i seçin.
  7. Yönet'in altında API'yi> kullanıma sunmaKapsam ekle'yi seçin. Uygulama Kimliği URI'si için Kaydet ve devam et'i seçerek varsayılan değeri kabul edin ve aşağıdaki ayrıntıları girin:
  • Kapsam adı: access_as_user
  • Kimler onay verebilir?: Yöneticiler ve kullanıcılar
  • onay görünen adını Yönetici:Access AspNetCoreWebApi-Quickstart
  • onay açıklaması Yönetici: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 3.1 ASP.NET Core 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ılır.

  1. Windows'da 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 dosyasında, ve TenantIddeğ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ş dizininde 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 olarak güncelleştirme

Bu kod örneğini ASP.NET Core 6.0'ı hedefleye 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?

Web API'si bir istemci uygulamasından belirteç alır ve web API'sindeki kod belirteci doğrular. Bu senaryo Senaryo : Korumalı web API'sinde daha ayrıntılı olarak açıklanmıştı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önteminde, AddMicrosoftIdentityWebApiMicrosoft.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");
    }

AddAuthentication() yöntemi hizmeti JwtBearer tabanlı kimlik doğrulaması ekleyecek şekilde yapılandırır.

öğesini 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ı Description
------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
ClientId Azure portal kaydedilen 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ğinizin (GUID) adı ya da iş veya common okul hesapları ya da Microsoft kişisel hesapları olan kullanıcılarda oturum açmak için.

Configure() yöntemi, app.UseAuthentication() adlandırılmış işlevlerini etkinleştiren ve app.UseAuthorization()adlı iki önemli yöntemi 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 doğrulaması

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'sinin kod örneği yönergelerini ve aşağıdakilerin nasıl başarıldığını gösteren daha fazla örneği 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.