Aracılığıyla paylaş


Eğitim: Bir App Service uygulamasını oturum açan kullanıcı adına SQL Veritabanı'na bağlama

Bu öğretici, Microsoft Entra kimlik doğrulama sağlayıcısını kullanarak bir App Service uygulamasında yerleşik kimlik doğrulamasını nasıl etkinleştireceğinizi ve ardından oturum açmış kullanıcının kimliğine bürünerek (bu süreç adına akış olarak da bilinir) bir arka uç Azure SQL Veritabanı'na bağlayarak nasıl genişleteceğinizi göstermektedir. Bu, Öğretici için daha gelişmiş bir bağlantı yaklaşımıdır: Yönetilen kimlikle verilere erişme ve kurumsal senaryolarda aşağıdaki avantajlara sahiptir:

  • Yönetilen kimlik yöntemi yaklaşımında olduğu gibi, arka uç hizmetlerine yönelik bağlantı sırlarını ortadan kaldırır.
  • Arka uç veritabanına (veya başka bir Azure hizmetine) verilerine ve işlevlerine kim veya ne kadar erişim vereceğini daha fazla kontrol eder.
  • Uygulamanın veri sunusunu oturum açmış kullanıcıya göre uyarlamasına olanak tanır.

Bu öğreticide, aşağıdaki öğreticilerden birinde dağıtmış olduğunuz örnek web uygulamasına Microsoft Entra kimlik doğrulamasını eklersiniz:

İşiniz bittiğinde, örnek uygulamanız oturum açmış kullanıcı adına güvenli bir şekilde SQL Veritabanı bağlanan kullanıcıların kimliğini doğrular.

Öğretici senaryosu için mimari diyagramı.

Not

Bu öğreticide ele alınan adımlar aşağıdaki sürümleri destekler:

  • .NET Framework 4.8 ve üzeri
  • .NET 6.0 ve üzeri

Öğreneceğiniz şeyler:

  • Azure SQL Veritabanı için yerleşik kimlik doğrulamasını etkinleştirme
  • Azure SQL Veritabanı'da diğer kimlik doğrulama seçeneklerini devre dışı bırakma
  • App Service kimlik doğrulamasını etkinleştirme
  • Kimlik sağlayıcısı olarak Microsoft Entra Id kullanma
  • Oturum açmış Microsoft Entra kullanıcısı adına Azure SQL Veritabanına erişim sağla.

Not

Microsoft Entra kimlik doğrulaması, şirket içi Active Directory Tümleşik Windows kimlik doğrulamasından (AD DS) farklıdır. AD DS ve Microsoft Entra Id tamamen farklı kimlik doğrulama protokolleri kullanır. Daha fazla bilgi için Bkz . Microsoft Entra Domain Services belgeleri.

Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.

Önkoşullar

Bu makale, aşağıdaki öğreticilerden herhangi birinde kaldığınız yerden devam eder.

Henüz yapmadıysanız, önce iki öğreticiden birini izleyin. Alternatif olarak, SQL Veritabanı ile kendi .NET uygulamanız için adımları uyarlayabilirsiniz.

Ortamınızı Azure CLI için hazırlayın.

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell'i başlatmak için:

Seçenek Örnek/Bağlantı
Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. Azure Cloud Shell için Deneyin örneğini gösteren ekran görüntüsü.
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. Azure Cloud Shell'i başlatma düğmesi.
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. Azure portalında Cloud Shell düğmesini gösteren ekran görüntüsü

Azure Cloud Shell'i kullanmak için:

  1. Cloud Shell'i başlatın.

  2. Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.

  3. Kodu veya komutu Cloud Shell oturumuna yapıştırmak için Windows ve Linux'ta Ctrl + Shift + V, veya macOS'ta Cmd + Shift + V tuşlarına basın.

  4. Kodu veya komutu çalıştırmak için Enter'ı seçin.

1. Microsoft Entra kimlik doğrulaması ile veritabanı sunucusunu yapılandırma

İlk olarak, bir Microsoft Entra kullanıcısını sunucunun yöneticisi olarak atayarak SQL Veritabanı için Microsoft Entra kimlik doğrulamasını etkinleştirin. Bu kullanıcı, Azure aboneliğinize kaydolmak için kullandığınız Microsoft hesabından farklıdır. Oluşturduğunuz, içeri aktardığınız, eşitlediğiniz veya Microsoft Entra Id'ye davet ettiğiniz bir kullanıcı olmalıdır. İzin verilen Microsoft Entra kullanıcıları hakkında daha fazla bilgi için bkz SQL Veritabanı'ndaki Microsoft Entra özellikleri ve sınırlamaları.

  1. Microsoft Entra kiracınızın henüz bir kullanıcısı yoksa, Microsoft Entra Id kullanarak kullanıcı ekleme veya silme adımlarını izleyerek bir kullanıcı oluşturun.

  2. Microsoft Entra kullanıcısının az ad user list nesne kimliğini bulun ve <user-principal-name> ile değiştirin. Sonuç bir değişkene kaydedilir.

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    İpucu

    Microsoft Entra Id içindeki tüm kullanıcı asıl adlarının listesini görmek için komutunu çalıştırın az ad user list --query [].userPrincipalName.

  3. Cloud Shell'de komutunu kullanarak az sql server ad-admin create bu Microsoft Entra kullanıcısını Active Directory yöneticisi olarak ekleyin. Aşağıdaki komutta <sunucu-adı> kısmını (sonek olmadan) gerçek sunucu adıyla değiştirin.

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Veritabanı sunucusu kimlik doğrulamasını Active Directory kimlik doğrulamasıyla kısıtlayın. Bu adım, SQL kimlik doğrulamayı etkin bir şekilde devre dışı bırakır.

    az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
    

Active Directory yöneticisi ekleme hakkında daha fazla bilgi için bkz. Microsoft Entra yöneticisi yapılandırma (SQL Veritabanı).

2. Uygulamanız için kullanıcı kimlik doğrulamasını etkinleştirme

Kimlik sağlayıcısı olarak Microsoft Entra Id ile kimlik doğrulamasını etkinleştirirsiniz. Daha fazla bilgi için bkz . App Services uygulamanız için Microsoft Entra kimlik doğrulamasını yapılandırma.

  1. Azure portalı menüsünde Kaynak grupları'nı seçin veya herhangi bir sayfadan Kaynak grupları'nı arayın ve seçin.

  2. Kaynak grupları'nda kaynak grubunuzu bulun ve seçin, ardından uygulamanızı seçin.

  3. Uygulamanızın sol menüsünde Kimlik Doğrulama'yı ve ardından Kimlik sağlayıcısı ekle'yi seçin.

  4. Kimlik sağlayıcısı ekle sayfasında, Microsoft ve Microsoft Entra kimliklerinde oturum açmak için Kimlik sağlayıcısı olarak Microsoft'u seçin.

  5. Varsayılan ayarları kabul edin ve Ekle'yi seçin.

    Kimlik sağlayıcısı ekleme sayfasını gösteren ekran görüntüsü.

İpucu

Hatalarla karşılaşır ve uygulamanızın kimlik doğrulama ayarlarını yeniden yapılandırırsanız, belirteç deposundaki belirteçler yeni ayarlardan yeniden oluşturulamayabilir. Belirteçlerinizin yeniden oluşturulmasını sağlamak için uygulamanızdan çıkış yapıp tekrar giriş yapmanız gerekir. Bunu yapmanın kolay bir yolu, tarayıcınızı özel modda kullanmak ve uygulamanızdaki ayarları değiştirdikten sonra tarayıcıyı kapatıp özel modda yeniden açmaktır.

3. Kullanıcı kimliğine bürünmeyi SQL Veritabanı için yapılandırma

Şu anda Azure uygulamanız SQL Veritabanı bağlanıyor ve uygulama ayarları olarak yönetilen SQL kimlik doğrulamasını (kullanıcı adı ve parola) kullanıyor. Bu adımda, uygulamaya oturum açmış Microsoft Entra kullanıcısı adına SQL Veritabanı erişme izni verirsiniz.

  1. Uygulamanın Kimlik Doğrulaması sayfasında, Kimlik sağlayıcısı'nın altında uygulamanızın adını seçin. Bu uygulama kaydı sizin için otomatik olarak oluşturuldu. Soldaki menüden API izinleri'ni seçin.

  2. İzin ekle'yi ve ardından kuruluşumun kullandığı API'leri seçin.

  3. Arama kutusuna Azure SQL Veritabanı yazın ve sonucu seçin.

  4. Azure SQL Veritabanı için API izinleri istek sayfasında, 'Temsilci izinleri'ni' seçin ve 'user_impersonation'ı seçin, ardından 'İzin ekle'yi seçin.

    Temsilci izinleri, user_impersonation ve İzin ekle düğmesinin seçili olduğu API izinlerini isteme sayfasının ekran görüntüsü.

4. App Service'i kullanılabilir bir erişim belirteci döndürecek şekilde yapılandırma

Microsoft Entra Id'deki uygulama kaydı artık oturum açmış kullanıcının kimliğine bürünerek SQL Veritabanı bağlanmak için gerekli izinlere sahiptir. Ardından App Service uygulamanızı size kullanılabilir bir erişim belirteci verecek şekilde yapılandıracaksınız.

Cloud Shell'de, uygulamada scope parametresini kimlik doğrulama ayarına eklemek için aşağıdaki komutları çalıştırın. Cloud Shell'de zaten yüklü olan JSON işlemesi için [jq] kullanır.

authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"

Komutlar, ek özel kapsamlara sahip bir loginParameters özelliğini etkili bir şekilde ekler. İstenen kapsamların açıklaması aşağıdadır:

  • openid, profileve email app service tarafından varsayılan olarak zaten isteniyor. Daha fazla bilgi için bkz . OpenID Connect Kapsamları.
  • https://database.windows.net/user_impersonationAzure SQL Veritabanı anlamına gelir. Sql Veritabanı'nı belirteç hedef kitlesi olarak içeren bir JWT sağlayan kapsamdır.
  • offline_access kolaylık sağlamak için (belirteçleri yenilemek istemeniz durumunda) buraya dahildir.

İpucu

Bunun yerine bir web arabirimi kullanarak gerekli kapsamları yapılandırmak için Kimlik doğrulama belirteçlerini yenileme makalesinde yer alan Microsoft adımlarına bakın.

Uygulamalarınız artık yapılandırılmıştır. Uygulama artık SQL Veritabanı kabul eden bir belirteç oluşturabilir.

5. Uygulama kodunuzda erişim belirtecini kullanın

Projeniz için izlediğiniz adımlar, Entity Framework (ASP.NET için varsayılan) veya Entity Framework Core (ASP.NET Core için varsayılan) kullanıp kullanmadığınıza bağlıdır.

  1. Visual Studio'da Paket Yöneticisi Konsolunu açın ve Entity Framework'i güncelleştirin:

    Update-Package EntityFramework
    
  2. DbContext nesnenizde ( Models/MyDbContext.cs)aşağıdaki kodu varsayılan oluşturucuya ekleyin.

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    conn.AccessToken = System.Web.HttpContext.Current.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    

Not

Kod, App Service kimlik doğrulaması tarafından sağlanan erişim belirtecini bağlantı nesnesine ekler.

Bu kod değişikliği yerel olarak çalışmaz. Daha fazla bilgi için App Service kimlik doğrulaması kullanırken yerel olarak nasıl hata ayıklayabilirim? bölümüne bakın.

6. Değişikliklerinizi yayımlama

  1. Öğretici: SQL Veritabanı ile Azure'da bir ASP.NET uygulaması oluşturma bölümünden geldiyseniz, App Service'te SQL kimlik doğrulamasını kullanarak kullanıcı adı ve parolayla bir bağlantı dizesi ayarlarsınız. Bağlantı gizli dizilerini kaldırmak için aşağıdaki komutu kullanın, ancak <grup-adı>, <uygulama-adı>, <db-server-name> ve <db-name> değerlerini sizinkiyle değiştirin.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings MyDbConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    
  2. Değişikliklerinizi Visual Studio'da yayımlayın. Çözüm Gezgini’nde DotNetAppSqlDb projenize sağ tıklayıp Yayımla’yı seçin.

    Visual Studio'da Çözüm Gezgini yayımlamayı gösteren ekran görüntüsü.

  3. Yayımlama sayfasında Yayımla'yı seçin.

Yeni web sayfası yapılacaklar listenizi gösterdiğinde, uygulamanız oturum açmış Microsoft Entra kullanıcısı adına veritabanına bağlanır.

Kod İlk Geçişi'nin ardından Azure uygulaması

Bundan sonra yapılacaklar listesini daha önce olduğu gibi düzenleyebilirsiniz.

7. Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:

az group delete --name <group-name>

Bu komutun çalıştırılması bir dakika sürebilir.

Sık sorulan sorular

Neden hata Login failed for user '<token-identified principal>'. alıyorum?

Bu hatanın en yaygın nedenleri şunlardır:

Azure SQL Veritabanı'nda diğer Microsoft Entra kullanıcılarını veya gruplarını nasıl eklerim?

  1. Sqlcmd veya SSMS gibi veritabanı sunucunuza bağlanın.

  2. SQL Veritabanı belgelerinde Microsoft Entra kimliklerine eşlenmiş bağımsız kullanıcılar oluşturun.

    Aşağıdaki Transact-SQL örneği SQL Server'a bir Microsoft Entra kimliği ekler ve ona bazı veritabanı rolleri verir:

    CREATE USER [<user-or-group-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<user-or-group-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<user-or-group-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<user-or-group-name>];
    GO
    

App Service kimlik doğrulaması kullanırken yerel olarak hata ayıklama Nasıl yaparım??

App Service kimlik doğrulaması Azure'daki bir özellik olduğundan, aynı kodun yerel ortamınızda çalışması mümkün değildir. Azure'da çalışan uygulamanın aksine, yerel kodunuz App Service'in kimlik doğrulama ara yazılımından yararlanamaz. Birkaç alternatif vardır:

  • ile Active Directory Interactiveyerel ortamınızdan SQL Veritabanı bağlanın. Kimlik doğrulama akışı, kullanıcının uygulamada oturum açmasını sağlamaz, ancak oturum açmış kullanıcıyı kullanarak arka uç veritabanına bağlanır ve veritabanı yetkilendirmesini yerel olarak test etmenize olanak tanır.
  • Erişim belirtecini, X-MS-TOKEN-AAD-ACCESS-TOKEN istek üst bilgisi yerine kodunuza manuel olarak kopyalayın.
  • Visual Studio'dan dağıtım yapıyorsanız App Service uygulamanızın uzaktan hata ayıklamasını kullanın.

Erişim belirteçlerinin süresi dolduğunda ne olur?

Erişim belirtecinizin süresi bir süre sonra sona erer. Kullanıcıların uygulamanızla yeniden kimlik doğrulaması yapmalarına gerek kalmadan erişim belirteçlerinizi yenileme hakkında bilgi için bkz . Kimlik sağlayıcısı belirteçlerini yenileme.

Sonraki adımlar

Öğrendikleriniz:

  • Azure SQL Veritabanı için yerleşik kimlik doğrulamasını etkinleştirme
  • Azure SQL Veritabanı'da diğer kimlik doğrulama seçeneklerini devre dışı bırakma
  • App Service kimlik doğrulamasını etkinleştirme
  • Kimlik sağlayıcısı olarak Microsoft Entra Id kullanma
  • Oturum açmış Microsoft Entra kullanıcısı adına Azure SQL Veritabanına erişim sağla.