.NET Azure SDK'sını kullanarak Azure hizmetlerinde .NET uygulamalarının kimliğini doğrulama

Bir uygulamanın depolama, anahtar kasası veya bilişsel hizmetler gibi bir Azure kaynağına erişmesi gerektiğinde, uygulamanın Kimliğinin Azure'da doğrulanması gerekir. Azure'a dağıtılan, şirket içinde dağıtılan veya yerel geliştirici iş istasyonunda geliştirme aşamasında olan tüm uygulamalar için bu durum geçerlidir. Bu makalede, .NET için Azure SDK'sını kullanırken bir uygulamanın Azure'da kimliğini doğrulamak için önerilen yaklaşımlar açıklanmaktadır.

Uygulamaların Azure kaynaklarında kimlik doğrulaması yaparken bağlantı dizesi yerine belirteç tabanlı kimlik doğrulaması kullanması önerilir. .NET için Azure SDK belirteç tabanlı kimlik doğrulamasını destekleyen sınıflar sağlar ve uygulamanın yerel geliştirme aşamasında, Azure'a dağıtıldığında veya şirket içi sunucuya dağıtıldığında uygulamaların Azure kaynaklarında sorunsuz bir şekilde kimlik doğrulaması gerçekleştirmesine olanak sağlar.

Bir uygulamanın Azure kaynaklarında kimlik doğrulaması yapmak için kullanması gereken belirteç tabanlı kimlik doğrulaması türü, uygulamanın çalıştırıldığı yere bağlıdır ve aşağıdaki diyagramda gösterilmiştir.

Bir uygulamanın çalıştığı yere bağlı olarak önerilen belirteç tabanlı kimlik doğrulama stratejilerini gösteren diyagram.

  • Bir geliştirici yerel geliştirme sırasında bir uygulama çalıştırıyorsa - Uygulama, yerel geliştirme için bir uygulama hizmet sorumlusu kullanarak veya geliştiricinin Azure kimlik bilgilerini kullanarak Azure'da kimlik doğrulaması yapabilir. Bu seçeneklerin her biri, yerel geliştirme sırasında kimlik doğrulaması bölümünde daha ayrıntılı olarak ele alınmıştı.
  • Bir uygulama Azure'da barındırıldığında - Uygulamanın yönetilen kimlik kullanarak Azure kaynaklarında kimlik doğrulaması yapması gerekir. Bu seçenek, sunucu ortamlarında kimlik doğrulaması bölümünde aşağıda daha ayrıntılı olarak açıklanmıştır.
  • Bir uygulama şirket içinde barındırıldığında ve dağıtıldığında - Uygulamanın bir uygulama hizmet sorumlusu kullanarak Azure kaynaklarında kimlik doğrulaması yapması gerekir. Bu seçenek, sunucu ortamlarında kimlik doğrulaması bölümünde aşağıda daha ayrıntılı olarak açıklanmıştır.

DefaultAzureCredential

DefaultAzureCredential Azure SDK tarafından sağlanan sınıf, uygulamaların çalıştırılan ortama bağlı olarak farklı kimlik doğrulama yöntemleri kullanmasına olanak tanır. Bu, uygulamaların yerel geliştirmeden test ortamlarına, kod değişikliği olmadan üretime yükseltilmesini sağlar. Her ortam için uygun kimlik doğrulama yöntemini yapılandırabilirsiniz ve DefaultAzureCredential bu kimlik doğrulama yöntemini otomatik olarak algılar ve kullanırsınız. kullanımı DefaultAzureCredential , farklı ortamlarda farklı kimlik doğrulama yöntemlerini kullanmak için koşullu mantığı veya özellik bayraklarını el ile kodlamak yerine tercih edilmelidir.

Sınıfı kullanmayla ilgili ayrıntılar, bu makalenin DefaultAzureCredential devamında Uygulamada kullanma DefaultAzureCredential bölümünde ele alınmıştır.

Belirteç tabanlı kimlik doğrulamasının avantajları

Azure için uygulama oluştururken bağlantı dizesi kullanımı üzerinden belirteç tabanlı kimlik doğrulaması kesinlikle önerilir. Belirteç tabanlı kimlik doğrulaması, bağlantı dizesi kimlik doğrulamasına göre aşağıdaki avantajları sunar.

  • Aşağıda açıklanan belirteç tabanlı kimlik doğrulama yöntemleri, Uygulamanın Azure kaynağında ihtiyaç duyduğu belirli izinleri oluşturmanıza olanak tanır. Bu, en az ayrıcalık ilkesini izler. Buna karşılık, bir bağlantı dizesi Azure kaynağına tam haklar verir.
  • Bağlantı dizesi olan herkes veya herhangi bir uygulama Bir Azure kaynağına bağlanabilirken, belirteç tabanlı kimlik doğrulama yöntemleri kaynağa erişimi yalnızca kaynağa erişmeyi amaçlanan uygulamalarla kapsama alır.
  • Yönetilen kimlik söz konusu olduğunda depolamak için bir uygulama gizli dizisi yoktur. Bu, bağlantı dizesi veya uygulama gizli dizisinin tehlikeye atılabilmesinden daha güvenli olmasını sağlar.
  • Azure SDK'daki Azure.Identity paketi, arka planda sizin için belirteçleri yönetir. Bu, belirteç tabanlı kimlik doğrulamasını bağlantı dizesi olarak kullanmayı kolaylaştırır.

bağlantı dizesi kullanımı, üretim veya hassas verilere erişmeyen ilk kavram kanıtı uygulamaları veya geliştirme prototipleriyle sınırlı olmalıdır. Aksi takdirde, Azure kaynaklarında kimlik doğrulaması yapılırken Azure SDK'da bulunan belirteç tabanlı kimlik doğrulama sınıfları her zaman tercih edilmelidir.

Sunucu ortamlarında kimlik doğrulaması

Bir sunucu ortamında barındırılırken, her uygulamaya uygulamanın çalıştırılacağı ortam başına benzersiz bir uygulama kimliği atanmalıdır. Azure'da bir uygulama kimliği, Azure'da uygulamaları tanımlamayı ve kimlik doğrulamayı amaçlayan özel bir güvenlik sorumlusu türü olan hizmet sorumlusuylatemsil edilir. Uygulamanız için kullanılacak hizmet sorumlusunun türü, uygulamanızın çalıştığı yere bağlıdır.

Kimlik doğrulama yöntemi Açıklama
Azure'da barındırılan uygulamalar Azure'da barındırılan uygulamalar Yönetilen Kimlik hizmet sorumlusu kullanmalıdır. Yönetilen kimlikler, Azure'da barındırılan bir uygulamanın kimliğini temsil etmek üzere tasarlanmıştır ve yalnızca Azure'da barındırılan uygulamalarla kullanılabilir.

Örneğin, Azure Uygulaması Hizmetinde barındırılan bir .NET web uygulamasına bir Yönetilen Kimlik atanır. Ardından uygulamaya atanan Yönetilen Kimlik, uygulamanın kimliğini diğer Azure hizmetlerinde doğrulamak için kullanılır.

Azure dışında barındırılan uygulamalar
(örneğin şirket içi uygulamalar)
Azure hizmetlerine bağlanması gereken Azure dışında barındırılan uygulamalar (örneğin şirket içi uygulamalar) bir Uygulama hizmet sorumlusu kullanmalıdır. Uygulama hizmet sorumlusu, Azure'daki uygulamanın kimliğini temsil eder ve uygulama kayıt işlemi aracılığıyla oluşturulur.

Örneğin, şirket içinde barındırılan ve Azure Blob Depolama kullanan bir .NET web uygulaması düşünün. Uygulama kayıt işlemini kullanarak uygulama için bir Uygulama hizmet sorumlusu oluşturabilirsiniz. AZURE_CLIENT_ID, AZURE_TENANT_IDve AZURE_CLIENT_SECRET tüm çalışma zamanında uygulama tarafından okunacak ortam değişkenleri olarak depolanır ve uygulamanın Uygulama hizmet sorumlusunu kullanarak Azure'da kimlik doğrulamasına izin verir.

Yerel geliştirme sırasında kimlik doğrulaması

Yerel geliştirme sırasında bir uygulama geliştiricinin iş istasyonunda çalıştırıldığında, yine de uygulama tarafından kullanılan tüm Azure hizmetlerinde kimlik doğrulaması yapması gerekir. Yerel geliştirme sırasında Azure'da uygulamaların kimliğini doğrulamaya yönelik iki ana strateji şunlardır:

Kimlik doğrulama yöntemi Açıklama
Yerel geliştirme sırasında kullanılacak ayrılmış uygulama hizmet sorumlusu nesneleri oluşturma Bu yöntemde, ayrılmış uygulama hizmet sorumlusu nesneleri yerel geliştirme sırasında kullanılmak üzere Uygulama kayıt işlemi kullanılarak ayarlanır. Hizmet sorumlusunun kimliği daha sonra yerel geliştirmede çalıştırıldığında uygulama tarafından erişilecek ortam değişkenleri olarak depolanır.

Bu yöntem, yerel geliştirme sırasında geliştiriciler tarafından kullanılan hizmet sorumlusu nesnelerine uygulama için gereken belirli kaynak izinlerini atamanızı sağlar. Bu, uygulamanın yalnızca ihtiyaç duyduğu belirli kaynaklara erişmesini sağlar ve uygulamanın üretimde sahip olacağı izinleri çoğaltır.

Bu yaklaşımın dezavantajı, bir uygulama üzerinde çalışan her geliştirici için ayrı hizmet sorumlusu nesneleri oluşturma gereksinimidir.

Yerel geliştirme sırasında geliştiricinin kimlik bilgilerini kullanarak uygulamanın Kimliğini Azure'da doğrulama Bu yöntemde bir geliştiricinin yerel iş istasyonunda Visual Studio, VS Code için Azure Araçları uzantısı, Azure CLI veya Azure PowerShell'den Azure'da oturum açması gerekir. Uygulama daha sonra geliştiricinin kimlik bilgilerine kimlik bilgisi deposundan erişebilir ve uygulamadan Azure kaynaklarına erişmek için bu kimlik bilgilerini kullanabilir.

Bir geliştiricinin Azure hesabında yalnızca Visual Studio, VS Code veya Azure CLI'dan oturum açması gerektiğinden bu yöntem daha kolay kurulum avantajına sahiptir. Bu yaklaşımın dezavantajı, geliştirici hesabının büyük olasılıkla uygulama için gerekenden daha fazla izine sahip olmasıdır. Bu nedenle, bu yaklaşım uygulamanın üretim ortamında çalıştıracağı izinleri doğru bir şekilde çoğaltmaz.

Uygulamada DefaultAzureCredential kullanma

DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında kullanılan kimlik doğrulama yöntemini belirler. Bu şekilde uygulamanız, ortama özgü kod uygulamadan farklı ortamlarda farklı kimlik doğrulama yöntemleri kullanabilir.

Kimlik bilgilerinin arandığı DefaultAzureCredential sıra ve konumlar DefaultAzureCredential konumunda bulunur.

uygulamasını uygulamak DefaultAzureCredentialiçin önce ve isteğe bağlı olarak Microsoft.Extensions.Azure paketlerini uygulamanıza ekleyinAzure.Identity. Bunu komut satırını veya NuGet Paket Yöneticisi kullanarak yapabilirsiniz.

Uygulama projesi dizininde tercihinize göre bir terminal ortamı açın ve aşağıdaki komutu girin.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Azure hizmetlerine genellikle SDK'dan karşılık gelen istemci sınıfları kullanılarak erişilir. Bu sınıflar ve kendi özel hizmetleriniz, uygulamanıza bağımlılık ekleme yoluyla erişilebilmeleri için dosyaya kaydedilmelidir Program.cs . Program.csiçinde, ve hizmetinizi DefaultAzureCredentialdoğru şekilde ayarlamak için aşağıdaki adımları izleyin.

  1. Azure.Identity ve Microsoft.Extensions.Azure ad alanlarını using deyimine ekleyin.
  2. İlgili yardımcı yöntemleri kullanarak Azure hizmetini kaydedin.
  3. yöntemine nesnesinin DefaultAzureCredential bir örneğini UseCredential geçirin.

Bunun bir örneği aşağıdaki kod kesiminde gösterilmiştir.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

Alternatif olarak, aşağıda görüldüğü gibi ek Azure kayıt yöntemlerinin yardımı olmadan hizmetlerinizde daha doğrudan kullanabilirsiniz DefaultAzureCredential .

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Yukarıdaki kod yerel geliştirme sırasında yerel iş istasyonunuzda çalıştırıldığında, yerel geliştirme sırasında uygulamanın Kimliğini Azure kaynaklarına doğrulamak için kullanılabilen bir geliştirici kimlik bilgileri kümesi için bir uygulama hizmet sorumlusunun veya Visual Studio, VS Code, Azure CLI veya Azure PowerShell'in ortam değişkenlerine bakar.

Azure'a dağıtıldığında bu kod uygulamanızın kimliğini diğer Azure kaynaklarda da doğrulayabilir. DefaultAzureCredential diğer hizmetlerde otomatik olarak kimlik doğrulaması yapmak için ortam ayarlarını ve yönetilen kimlik yapılandırmalarını alabilir.

DefaultAzureCredential kimlik doğrulama yöntemlerinin sırasını keşfetme

Dahili olarak, DefaultAzureCredential Azure kaynaklarında uygulamaların kimliğini doğrulamak için bir kimlik bilgisi sağlayıcıları zinciri uygular. Her kimlik bilgisi sağlayıcısı, bu tür kimlik bilgilerinin uygulama için yapılandırılıp yapılandırılmadığını algılayabilir. DefaultAzureCredential sırayla her sağlayıcıyı denetler ve kimlik bilgilerinin yapılandırıldığı ilk sağlayıcının kimlik bilgilerini kullanır.

Kimlik bilgilerinin arandığı DefaultAzureCredential sıra ve konumlar DefaultAzureCredential konumunda bulunur.

Kimlik bilgisi türü Açıklama
Uygulama hizmet sorumlusu DefaultAzureCredential uygulama hizmet sorumlusunun (uygulama kullanıcısı) uygulama için ayarlandığını belirlemek üzere bir dizi ortam değişkeni okur. Öyleyse, DefaultAzureCredential uygulamanın kimliğini Azure'da doğrulamak için bu değerleri kullanır.

Bu yöntem genellikle sunucu ortamlarında kullanılır, ancak yerel olarak geliştirirken de kullanılabilir.
Yönetilen Kimlik Uygulama Yönetilen Kimlik etkin bir Azure konağına dağıtılırsa, DefaultAzureCredential bu Yönetilen Kimliği kullanarak uygulamanın kimliğini Azure'da doğrular. Yönetilen Kimlik kullanarak kimlik doğrulaması, bu belgenin Sunucu ortamlarında kimlik doğrulaması bölümünde açıklanmıştır.

Bu yöntem yalnızca bir uygulama Azure'da Azure Uygulaması Hizmeti, Azure İşlevleri veya Azure Sanal Makineler gibi bir hizmet kullanılarak barındırıldığında kullanılabilir.
Visual Studio Geliştirici, Visual Studio'da oturum açarak Azure'da kimlik doğrulaması yapmışsa, DefaultAzureCredential aynı hesabı kullanarak uygulamanın kimliğini Azure'da doğrular.
Visual Studio Code Geliştirici, Visual Studio Code Azure Hesabı eklentisini kullanarak Azure'da kimlik doğrulaması yapmışsa, DefaultAzureCredential aynı hesabı kullanarak uygulamanın kimliğini Azure'da doğrular.
Azure CLI Bir geliştirici Azure CLI'daki komutu kullanarak az login Azure'da kimlik doğrulaması yapmışsa, DefaultAzureCredential aynı hesabı kullanarak uygulamanın kimliğini Azure'da doğrular.
Azure PowerShell Bir geliştirici Azure PowerShell'den cmdlet'ini Connect-AzAccount kullanarak Azure'da kimlik doğrulaması yapmışsa, DefaultAzureCredential aynı hesabı kullanarak uygulamanın kimliğini Azure'da doğrular.
Etkileşimli Etkinleştirilirse, DefaultAzureCredential geçerli sistemin varsayılan tarayıcısı aracılığıyla geliştiricinin kimliğini etkileşimli olarak doğrular. Varsayılan olarak, bu seçenek devre dışıdır.