Tutorial: Koneksi aplikasi App Service ke SQL Database atas nama pengguna yang masuk

Tutorial ini menunjukkan kepada Anda cara mengaktifkan autentikasi bawaan di aplikasi App Service menggunakan penyedia autentikasi Microsoft Entra, lalu memperluasnya dengan menyambungkannya ke Azure SQL Database back-end dengan meniru pengguna yang masuk (juga dikenal sebagai alur atas nama). Ini adalah pendekatan konektivitas yang lebih canggih untuk Tutorial: Mengakses data dengan identitas terkelola dan memiliki keuntungan berikut dalam skenario perusahaan:

  • Menghilangkan rahasia koneksi ke layanan back-end, sama seperti pendekatan identitas terkelola.
  • Memberi database back-end (atau layanan Azure lainnya) kontrol lebih besar atas siapa atau berapa banyak untuk memberikan akses ke data dan fungsionalitasnya.
  • Memungkinkan aplikasi menyesuaikan presentasi datanya dengan pengguna yang masuk.

Dalam tutorial ini, Anda menambahkan autentikasi Microsoft Entra ke contoh aplikasi web yang Anda sebarkan dalam salah satu tutorial berikut:

Setelah selesai, aplikasi sampel Anda akan mengautentikasi pengguna yang terhubung ke SQL Database dengan aman atas nama pengguna yang masuk.

Architecture diagram for tutorial scenario.

Catatan

Langkah-langkah yang tercakup dalam tutorial ini mendukung versi berikut:

  • .NET Framework 4.8 dan yang lebih tinggi
  • .NET 6.0 dan yang lebih tinggi

Apa yang akan Anda pelajari:

  • Mengaktifkan autentikasi bawaan untuk Azure SQL Database
  • Menonaktifkan opsi autentikasi lain di Azure SQL Database
  • Mengaktifkan autentikasi App Service
  • Menggunakan ID Microsoft Entra sebagai penyedia identitas
  • Mengakses Azure SQL Database atas nama pengguna Microsoft Entra yang masuk

Catatan

Autentikasi Microsoft Entra berbeda dari autentikasi Windows Terintegrasi di Active Directory lokal (AD DS). AD DS dan MICROSOFT Entra ID menggunakan protokol autentikasi yang sama sekali berbeda. Untuk informasi selengkapnya, lihat dokumentasi Microsoft Entra Domain Services.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Artikel ini berlanjut di mana Anda tinggalkan di salah satu tutorial berikut:

Jika Anda belum melakukannya, ikuti salah satu dari dua tutorial tersebut terlebih dahulu. Atau, Anda dapat menyesuaikan langkah-langkahnya untuk aplikasi .NET Anda sendiri dengan SQL Database.

Mempersiapkan lingkungan Anda untuk Azure CLI.

Azure meng-hosting Azure Cloud Shell, lingkungan shell interaktif yang dapat Anda gunakan melalui browser. Anda dapat menggunakan Bash atau PowerShell dengan Cloud Shell untuk bekerja dengan layanan Azure. Anda dapat menggunakan perintah Cloud Shell yang telah diinstal sebelumnya untuk menjalankan kode dalam artikel ini tanpa harus menginstal apa-apa di lingkungan lokal Anda.

Untuk memulai Azure Cloud Shell:

Opsi Contoh/Tautan
Pilih Coba di pojok kanan atas blok kode atau perintah. Memilih Coba tidak otomatis menyalin kode atau perintah ke Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Buka https://shell.azure.com, atau pilih tombol Luncurkan Cloud Shell untuk membuka Cloud Shell di browser Anda. Button to launch Azure Cloud Shell.
Pilih tombol Cloud Shell pada bilah menu di kanan atas di portal Microsoft Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Untuk menggunakan Azure Cloud Shell:

  1. Mulai Cloud Shell.

  2. Pilih tombol Salin pada blok kode (atau blok perintah) untuk menyalin kode atau perintah.

  3. Tempel kode atau perintah ke dalam sesi Cloud Shell dengan memilih Ctrl+Shift+V di Windows dan Linux, atau dengan memilih Cmd+Shift+V di macOS.

  4. Pilih Masukkan untuk menjalankan kode atau perintah.

1. Mengonfigurasi server database dengan autentikasi Microsoft Entra

Pertama, aktifkan autentikasi Microsoft Entra ke SQL Database dengan menetapkan pengguna Microsoft Entra sebagai admin server. Pengguna ini berbeda dengan akun Microsoft yang Anda gunakan untuk mendaftar langganan Azure Anda. Ini harus pengguna yang Anda buat, impor, sinkronkan, atau diundang ke ID Microsoft Entra. Untuk informasi selengkapnya tentang pengguna Microsoft Entra yang diizinkan, lihat Fitur dan batasan Microsoft Entra di SQL Database.

  1. Jika penyewa Microsoft Entra Anda belum memiliki pengguna, buat dengan mengikuti langkah-langkah di Menambahkan atau menghapus pengguna menggunakan ID Microsoft Entra.

  2. Temukan ID objek pengguna Microsoft Entra menggunakan az ad user list dan ganti <user-principal-name>. Hasilnya disimpan ke variabel.

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

    Tip

    Untuk melihat daftar semua nama utama pengguna di ID Microsoft Entra, jalankan az ad user list --query [].userPrincipalName.

  3. Tambahkan pengguna Microsoft Entra ini sebagai admin Direktori Aktif menggunakan az sql server ad-admin create perintah di Cloud Shell. Dalam perintah berikut, ganti <server-name> dengan nama server (tanpa akhiran .database.windows.net).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Batasi autentikasi server database ke autentikasi Direktori Aktif. Langkah ini secara efektif menonaktifkan autentikasi SQL.

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

Untuk informasi selengkapnya tentang menambahkan admin Direktori Aktif, lihat Memprovisikan admin Microsoft Entra (SQL Database).

2. Aktifkan autentikasi pengguna untuk aplikasi Anda

Anda mengaktifkan autentikasi dengan ID Microsoft Entra sebagai idP. Untuk informasi selengkapnya, lihat Mengonfigurasi autentikasi Microsoft Entra untuk aplikasi App Services Anda.

  1. Pada menu portal Microsoft Azure, pilih Grup sumber daya atau cari dan pilih Grup sumber daya dari halaman mana pun.

  2. Di Grup sumber daya, temukan dan pilih grup sumber daya Anda, lalu pilih aplikasi Anda.

  3. Di menu kiri aplikasi Anda, pilih Autentikasi, lalu pilih Tambahkan IdP.

  4. Di halaman Tambahkan idP , pilih Microsoft sebagai Penyedia identitas untuk masuk ke Identitas Microsoft dan Microsoft Entra.

  5. Terima pengaturan default dan pilih Tambahkan.

    Screenshot showing the add identity provider page.

Tip

Jika Anda mengalami kesalahan dan mengonfigurasi ulang pengaturan autentikasi aplikasi, token di penyimpanan token mungkin tidak dibuat ulang dari pengaturan baru. Untuk memastikan token diregenerasi, Anda harus keluar dan masuk kembali ke aplikasi Anda. Cara mudah untuk melakukannya adalah dengan menggunakan browser Anda dalam mode privat, serta menutup dan membuka kembali browser dalam mode privat setelah mengubah pengaturan di aplikasi Anda.

3. Mengonfigurasi peniruan identitas pengguna ke SQL Database

Saat ini, aplikasi Azure Anda tersambung ke SQL Database menggunakan autentikasi SQL (nama pengguna dan kata sandi) yang dikelola sebagai pengaturan aplikasi. Dalam langkah ini, Anda memberikan izin aplikasi untuk mengakses SQL Database atas nama pengguna Microsoft Entra yang masuk.

  1. Di halaman Autentikasi untuk aplikasi, pilih nama aplikasi Anda di bawah Penyedia identitas. Pendaftaran aplikasi ini secara otomatis dibuat untuk Anda. Pilih Izin API di menu sebelah kiri.

  2. Pilih Tambahkan izin, lalu pilih API yang digunakan organisasi saya.

  3. Ketik Azure SQL Database di kotak pencarian dan pilih hasilnya.

  4. Di halaman Minta izin API untuk Azure SQL Database, pilih Izin yang didelegasikan dan user_impersonation, lalu pilih Tambahkan izin.

    Screenshot of the Request API permissions page showing Delegated permissions, user_impersonation, and the Add permission button selected.

4. Mengonfigurasi App Service untuk mengembalikan token akses yang dapat digunakan

Pendaftaran aplikasi di MICROSOFT Entra ID sekarang memiliki izin yang diperlukan untuk menyambungkan ke SQL Database dengan meniru pengguna yang masuk. Selanjutnya, Anda mengonfigurasi aplikasi App Service untuk memberi Anda token akses yang dapat digunakan.

Di Cloud Shell, jalankan perintah berikut pada aplikasi untuk menambahkan scope parameter ke pengaturan identityProviders.azureActiveDirectory.login.loginParametersautentikasi .

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"

Perintah secara efektif menambahkan loginParameters properti dengan cakupan kustom tambahan. Berikut adalah penjelasan tentang cakupan yang diminta:

  • openid, profile, dan email diminta oleh App Service secara default. Untuk mengetahui informasinya, lihat Cakupan OpenID Connect.
  • https://database.windows.net/user_impersonation mengacu pada Azure SQL Database. Ini adalah cakupan yang memberi Anda token JWT yang menyertakan SQL Database sebagai audiens token.
  • offline_access disertakan di sini untuk kenyamanan (jika Anda ingin merefresh token).

Tip

Untuk mengonfigurasi cakupan yang diperlukan menggunakan antarmuka web sebagai gantinya, lihat langkah Microsoft di Refresh token autentikasi.

Aplikasi Anda kini telah dikonfigurasi. Aplikasi ini sekarang dapat menghasilkan token yang diterima SQL Database.

5. Gunakan token akses dalam kode aplikasi Anda

Langkah-langkah yang Anda ikuti untuk proyek Anda bergantung pada apakah Anda menggunakan Kerangka Kerja Entitas (default untuk ASP.NET) atau Inti Kerangka Kerja Entitas (default untuk ASP.NET Core).

  1. Di Visual Studio, buka Konsol Manajer Paket dan perbarui Kerangka Kerja Entitas:

    Update-Package EntityFramework
    
  2. Di objek DbContext Anda (di Models/MyDbContext.cs), tambahkan kode berikut ke konstruktor default.

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

Catatan

Kode menambahkan token akses yang disediakan oleh autentikasi App Service ke objek koneksi.

Perubahan kode ini tidak berfungsi secara lokal. Untuk informasi selengkapnya, lihat Bagaimana cara men-debug secara lokal saat menggunakan autentikasi App Service?.

6. Terbitkan perubahan Anda

  1. Jika Anda berasal dari Tutorial: Membangun aplikasi ASP.NET di Azure dengan SQL Database, Anda mengatur string koneksi di App Service menggunakan autentikasi SQL, dengan nama pengguna dan kata sandi. Gunakan perintah berikut untuk menghapus rahasia koneksi, tetapi ganti <nama grup,< nama>> aplikasi,< db-server-name>, dan< db-name> dengan nama Anda.

    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. Terbitkan perubahan Anda di Visual Studio. Di Penjelajah Solusi, klik kanan proyek DotNetAppSqlDb Anda dan pilih Terbitkan.

    Screenshot showing how to publish from the Solution Explorer in Visual Studio.

  3. Di halaman terbitkan, pilih Terbitkan.

Saat halaman web baru menunjukkan daftar tugas Anda, aplikasi Anda tersambung ke database atas nama pengguna Microsoft Entra yang masuk.

Azure app after Code First Migration

Anda sekarang dapat mengedit daftar tugas seperti sebelumnya.

7. Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name <group-name>

Perintah ini mungkin perlu waktu beberapa saat untuk dijalankan.

Tanya jawab umum

Mengapa saya mendapatkan Login failed for user '<token-identified principal>'. kesalahan?

Penyebab paling umum dari kesalahan ini adalah:

Bagaimana cara menambahkan pengguna atau grup Microsoft Entra lainnya di Azure SQL Database?

  1. Koneksi ke server database Anda, seperti dengan sqlcmd atau SSMS.

  2. Buat pengguna mandiri yang dipetakan ke identitas Microsoft Entra dalam dokumentasi SQL Database.

    Contoh Transact-SQL berikut menambahkan identitas Microsoft Entra ke SQL Server dan memberinya beberapa peran database:

    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
    

Bagaimana cara men-debug secara lokal saat menggunakan autentikasi App Service?

Karena autentikasi App Service adalah fitur di Azure, kode yang sama tidak mungkin berfungsi di lingkungan lokal Anda. Tidak seperti aplikasi yang berjalan di Azure, kode lokal Anda tidak mendapat manfaat dari middleware autentikasi dari App Service. Anda memiliki beberapa alternatif:

  • Koneksi ke SQL Database dari lingkungan lokal Anda dengan Active Directory Interactive. Alur autentikasi tidak memasukkan pengguna ke aplikasi itu sendiri, tetapi terhubung ke database back-end dengan pengguna yang masuk, dan memungkinkan Anda untuk menguji otorisasi database secara lokal.
  • Salin token akses secara manual dari https://<app-name>.azurewebsites.net/.auth/me ke dalam kode Anda, sebagai pengganti X-MS-TOKEN-AAD-ACCESS-TOKEN header permintaan.
  • Jika Anda menyebarkan dari Visual Studio, gunakan penelusuran kesalahan jarak jauh aplikasi App Service Anda.

Apa yang terjadi ketika token akses kedaluwarsa?

Token akses Anda kedaluwarsa setelah beberapa waktu. Untuk informasi tentang cara merefresh token akses Anda tanpa mengharuskan pengguna untuk melakukan otorisasi ulang dengan aplikasi Anda, lihat Merefresh token penyedia identitas.

Langkah berikutnya

Apa yang Anda pelajari:

  • Mengaktifkan autentikasi bawaan untuk Azure SQL Database
  • Menonaktifkan opsi autentikasi lain di Azure SQL Database
  • Mengaktifkan autentikasi App Service
  • Menggunakan ID Microsoft Entra sebagai penyedia identitas
  • Mengakses Azure SQL Database atas nama pengguna Microsoft Entra yang masuk