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:
- Tutorial: Membuat aplikasi ASP.NET di Azure dengan Azure SQL Database
- Tutorial: Membuat aplikasi ASP.NET Core dan Azure SQL Database di Azure App Service
Setelah selesai, aplikasi sampel Anda akan mengautentikasi pengguna yang terhubung ke SQL Database dengan aman atas nama pengguna yang masuk.
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:
- Tutorial: Membuat aplikasi ASP.NET di Azure dengan SQL Database
- Tutorial: Membuat aplikasi ASP.NET Core dan Azure SQL Database di Azure App Service.
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. | |
Buka https://shell.azure.com, atau pilih tombol Luncurkan Cloud Shell untuk membuka Cloud Shell di browser Anda. | |
Pilih tombol Cloud Shell pada bilah menu di kanan atas di portal Microsoft Azure. |
Untuk menggunakan Azure Cloud Shell:
Mulai Cloud Shell.
Pilih tombol Salin pada blok kode (atau blok perintah) untuk menyalin kode atau perintah.
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.
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.
Jika penyewa Microsoft Entra Anda belum memiliki pengguna, buat dengan mengikuti langkah-langkah di Menambahkan atau menghapus pengguna menggunakan ID Microsoft Entra.
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
.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
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.
Pada menu portal Microsoft Azure, pilih Grup sumber daya atau cari dan pilih Grup sumber daya dari halaman mana pun.
Di Grup sumber daya, temukan dan pilih grup sumber daya Anda, lalu pilih aplikasi Anda.
Di menu kiri aplikasi Anda, pilih Autentikasi, lalu pilih Tambahkan IdP.
Di halaman Tambahkan idP , pilih Microsoft sebagai Penyedia identitas untuk masuk ke Identitas Microsoft dan Microsoft Entra.
Terima pengaturan default dan pilih Tambahkan.
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.
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.
Pilih Tambahkan izin, lalu pilih API yang digunakan organisasi saya.
Ketik Azure SQL Database di kotak pencarian dan pilih hasilnya.
Di halaman Minta izin API untuk Azure SQL Database, pilih Izin yang didelegasikan dan user_impersonation, lalu pilih Tambahkan izin.
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.loginParameters
autentikasi .
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
, danemail
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).
Di Visual Studio, buka Konsol Manajer Paket dan perbarui Kerangka Kerja Entitas:
Update-Package EntityFramework
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
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>;"
Terbitkan perubahan Anda di Visual Studio. Di Penjelajah Solusi, klik kanan proyek DotNetAppSqlDb Anda dan pilih Terbitkan.
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.
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? - Bagaimana cara menambahkan pengguna atau grup Microsoft Entra lainnya di Azure SQL Database?
- Bagaimana cara men-debug secara lokal saat menggunakan autentikasi App Service?
- Apa yang terjadi ketika token akses kedaluwarsa?
Mengapa saya mendapatkan Login failed for user '<token-identified principal>'.
kesalahan?
Penyebab paling umum dari kesalahan ini adalah:
- Anda menjalankan kode secara lokal, dan tidak ada token yang
X-MS-TOKEN-AAD-ACCESS-TOKEN
valid di header permintaan. Lihat Bagaimana cara men-debug secara lokal saat menggunakan autentikasi App Service?. - Autentikasi Microsoft Entra tidak dikonfigurasi di SQL Database Anda.
- Pengguna yang masuk tidak diizinkan untuk menyambungkan ke database. Lihat Bagaimana cara menambahkan pengguna atau grup Microsoft Entra lainnya di Azure SQL Database?.
Bagaimana cara menambahkan pengguna atau grup Microsoft Entra lainnya di Azure SQL Database?
Koneksi ke server database Anda, seperti dengan sqlcmd atau SSMS.
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 penggantiX-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