Öğretici: Bir App Service uygulamasını oturum açmış kullanıcı adına SQL Veritabanı bağlama
Bu öğreticide, Microsoft Entra kimlik doğrulama sağlayıcısını kullanarak bir App Service uygulamasında yerleşik kimlik doğrulamasını etkinleştirme ve ardından oturum açmış kullanıcının kimliğine bürünerek (adına akış olarak da bilinir) bunu bir arka uç Azure SQL Veritabanı bağlayarak genişletme gösterilmektedir. 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 yaklaşımında olduğu gibi arka uç hizmetlerine yönelik bağlantı gizli dizilerini 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:
- Öğretici: Azure SQL Veritabanı ile Azure'da ASP.NET uygulaması oluşturma
- Öğretici: Azure Uygulaması Hizmetinde ASP.NET Core ve Azure SQL Veritabanı uygulaması oluşturma
İş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.
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 erişim Azure SQL Veritabanı
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 aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Önkoşullar
Bu makale, aşağıdaki öğreticilerden birinde kaldığınız yerden devam eder:
- Öğretici: SQL Veritabanı ile Azure'da ASP.NET uygulaması oluşturma
- Öğretici: Azure Uygulaması Hizmeti'nde ASP.NET Core ve SQL Veritabanı uygulaması oluşturma.
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. | |
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 portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. |
Azure Cloud Shell'i kullanmak için:
Cloud Shell'i başlatın.
Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.
Windows ve Linux'ta Ctrl+Shift V'yi seçerek veya macOS üzerinde Cmd+Shift++V'yi seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.
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ı'deki Microsoft Entra özellikleri ve sınırlamaları.
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.
ve kullanıcı-asıl-adını kullanarak Microsoft Entra kullanıcısının
az ad user list
nesne kimliğini bulun.<> 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
.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ını sunucu adıyla> değiştirin <(sonek olmadan.database.windows.net
).az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
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 admin (SQL Veritabanı) sağlama.
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.
Azure portalı menüsünde Kaynak grupları'nı seçin veya herhangi bir sayfadan Kaynak grupları'nı arayın ve seçin.
Kaynak grupları'nda kaynak grubunuzu bulun ve seçin, ardından uygulamanızı seçin.
Uygulamanızın sol menüsünde Kimlik Doğrulama'yı ve ardından Kimlik sağlayıcısı ekle'yi seçin.
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.
Varsayılan ayarları kabul edin ve Ekle'yi seçin.
İ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şturulduğundan emin olmak için oturumu kapatıp uygulamanızda yeniden oturum açmanı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ünme özelliğini SQL Veritabanı 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.
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.
İzin ekle'yi ve ardından kuruluşumun kullandığı API'leri seçin.
Arama kutusuna Azure SQL Veritabanı yazın ve sonucu seçin.
Azure SQL Veritabanı için API izinleri iste sayfasında Temsilci izinleri'ni seçin ve user_impersonation ve ardından İzin ekle'yi seçin.
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, parametresini kimlik doğrulama ayarına identityProviders.azureActiveDirectory.login.loginParameters
eklemek scope
için uygulamada 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 özelliği etkili bir loginParameters
şekilde ekler. İstenen kapsamların açıklaması aşağıdadır:
openid
,profile
veemail
app service tarafından varsayılan olarak zaten isteniyor. Daha fazla bilgi için bkz . OpenID Connect Kapsamları.https://database.windows.net/user_impersonation
Azure SQL Veritabanı anlamına gelir. Belirteç hedef kitlesi olarak SQL Veritabanı içeren bir JWT belirteci 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.
Visual Studio'da Paket Yöneticisi Konsolunu açın ve Entity Framework'i güncelleştirin:
Update-Package EntityFramework
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 bkz. App Service kimlik doğrulaması kullanırken yerel olarak hata ayıklama Nasıl yaparım??
6. Değişikliklerinizi yayımlama
Öğ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>;"
Değişikliklerinizi Visual Studio'da yayımlayın. Çözüm Gezgini’nde DotNetAppSqlDb projenize sağ tıklayıp Yayımla’yı seçin.
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.
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? - Azure SQL Veritabanı diğer Microsoft Entra kullanıcılarını veya gruplarını eklemek Nasıl yaparım??
- App Service kimlik doğrulaması kullanırken yerel olarak hata ayıklama Nasıl yaparım??
- Erişim belirteçlerinin süresi dolduğunda ne olur?
Neden hata Login failed for user '<token-identified principal>'.
alıyorum?
Bu hatanın en yaygın nedenleri şunlardır:
- Kodu yerel olarak çalıştırıyorsunuz ve istek üst bilgisinde
X-MS-TOKEN-AAD-ACCESS-TOKEN
geçerli bir belirteç yok. Bkz. App Service kimlik doğrulaması kullanırken yerel olarak hata ayıklama Nasıl yaparım?? - Microsoft Entra kimlik doğrulaması SQL Veritabanı yapılandırılmamış.
- Oturum açmış kullanıcının veritabanına bağlanmasına izin verilmiyor. Bkz. Nasıl yaparım? Azure SQL Veritabanı diğer Microsoft Entra kullanıcılarını veya gruplarını ekleme.
Azure SQL Veritabanı diğer Microsoft Entra kullanıcılarını veya gruplarını eklemek Nasıl yaparım??
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 Interactive
yerel ortamınızdan SQL Veritabanı bağlanın. Kimlik doğrulama akışı kullanıcının kendisinde uygulamada oturum açmaz, ancak oturum açmış kullanıcıyla arka uç veritabanına bağlanır ve veritabanı yetkilendirmesini yerel olarak test etmenizi sağlar. - erişim belirtecini
https://<app-name>.azurewebsites.net/.auth/me
, istek üst bilgisi yerineX-MS-TOKEN-AAD-ACCESS-TOKEN
kodunuz içine el ile 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 erişim Azure SQL Veritabanı