Bagikan melalui


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

Tutorial ini menunjukkan kepada Anda cara menyambungkan aplikasi Azure App Service ke database Azure SQL back-end dengan meniru pengguna yang masuk, juga disebut alur atas nama. Untuk mengonfigurasi alur ini, Anda mengaktifkan autentikasi bawaan App Service menggunakan IdP Microsoft Entra.

Metode konektivitas ini lebih canggih daripada pendekatan identitas terkelola dalam Tutorial: Mengakses data dengan identitas terkelola, dan memiliki keuntungan berikut dalam skenario perusahaan:

  • Menghilangkan rahasia koneksi ke layanan back-end, seperti halnya pendekatan identitas terkelola.
  • Memberikan database back-end atau layanan Azure lainnya kontrol lebih besar atas berapa banyak akses yang diberikan kepada siapa.
  • Memungkinkan aplikasi menyesuaikan presentasi datanya dengan pengguna yang masuk.

Dalam tutorial ini, Anda menambahkan autentikasi Microsoft Entra ke aplikasi web .NET yang memiliki back end Azure SQL Database. Anda akan mempelajari cara untuk:

  • Aktifkan autentikasi Microsoft Entra untuk Azure SQL Database.
  • Nonaktifkan opsi autentikasi SQL Database lainnya.
  • Tambahkan ID Microsoft Entra sebagai penyedia identitas untuk aplikasi Anda.
  • Mengonfigurasi izin peniruan identitas pengguna SQL Database.
  • Konfigurasikan App Service untuk menyediakan token akses yang dapat digunakan untuk SQL Database.
  • Akses database Azure SQL Anda atas nama pengguna Microsoft Entra yang masuk.

Saat Anda menyelesaikan tutorial, aplikasi Anda terhubung dengan aman ke SQL Database atas nama pengguna yang masuk.

Diagram arsitektur untuk skenario tutorial.

Catatan

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

Prasyarat

1. Mengonfigurasi server database dengan autentikasi Microsoft Entra

Aktifkan autentikasi Microsoft Entra ke database Azure SQL dengan menetapkan pengguna Microsoft Entra sebagai admin server Azure SQL. Admin Microsoft Entra harus merupakan pengguna yang dibuat, diimpor, disinkronkan, atau diundang ke id Microsoft Entra. Pengguna Microsoft Entra mungkin tidak sama dengan pengguna akun Microsoft untuk langganan Azure.

Untuk menambahkan pengguna ID Microsoft Entra sebagai admin server Azure SQL, jalankan perintah Azure CLI berikut.

  1. Gunakan az ad user list dengan display-nameparameter , , filteratau upn untuk mendapatkan ID objek untuk pengguna ID Microsoft Entra yang ingin Anda jadikan admin. Misalnya, perintah berikut mencantumkan informasi untuk pengguna ID Microsoft Entra dengan display-name Nama Belakang Nama Depan.

    az ad user list --display-name "Firstname Lastname"
    

    id Salin nilai dari output yang akan digunakan di langkah berikutnya.

    Tips

    Anda dapat menjalankan az ad user list mandiri untuk menampilkan informasi bagi semua pengguna di direktori Microsoft Entra.

  2. Tambahkan pengguna ID Microsoft Entra sebagai admin di server Azure SQL Anda dengan menggunakan az sql server ad-admin create dengan object-id parameter . Dalam perintah berikut, ganti <group-name> dengan nama grup sumber daya server Anda, <server-name> dengan nama server Anda dikurangi .database.windows.net akhiran, dan <entra-id> dengan id output dari perintah sebelumnya az ad user list .

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Batasi autentikasi server database hanya untuk autentikasi Microsoft Entra. Langkah ini menonaktifkan autentikasi nama pengguna dan kata sandi SQL.

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

2. Aktifkan autentikasi ID Microsoft Entra untuk aplikasi Anda

Tambahkan ID Microsoft Entra sebagai penyedia identitas untuk aplikasi Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi autentikasi Microsoft Entra untuk aplikasi App Services Anda.

  1. Pada halaman portal Microsoft Azure untuk aplikasi Anda, pilih Autentikasi di bawah Pengaturan di menu navigasi kiri.

  2. Pada halaman Autentikasi , pilih Tambahkan Penyedia Identitas, atau pilih Tambahkan penyedia di bagian Penyedia identitas .

  3. Pada halaman Tambahkan idP , pilih Microsoft sebagai penyedia.

  4. Untuk Kedaluwarsa rahasia klien, pilih salah satu opsi daftar dropdown, seperti Direkomendasikan: 180 hari.

  5. Pertahankan semua pengaturan default, dan pilih Tambahkan.

    Cuplikan layar yang menunjukkan halaman penambahan penyedia identitas.

Catatan

Jika Anda mengonfigurasi ulang pengaturan autentikasi aplikasi, token di penyimpanan token mungkin tidak dibuat ulang dari pengaturan baru. Untuk memastikan token Anda meregenerasi, keluar, dan masuk kembali ke aplikasi Anda. Metode yang mudah adalah menggunakan browser Anda dalam mode privat. Tutup dan buka kembali browser dalam mode privat setelah mengubah pengaturan di aplikasi Anda.

3. Mengonfigurasi peniruan pengguna SQL Database

Berikan izin aplikasi Anda untuk mengakses SQL Database atas nama pengguna Microsoft Entra yang masuk.

  1. Pada halaman Autentikasi aplikasi, pilih nama aplikasi Anda di bawah Penyedia identitas.

    Halaman pendaftaran aplikasi terbuka. Pendaftaran ini dibuat secara otomatis saat Anda menambahkan penyedia Microsoft Entra.

  2. Pilih Izin API di bawah Kelola di menu navigasi kiri.

  3. Pada halaman Izin API , pilih Tambahkan izin.

  4. Pada layar Minta izin API , pilih tab API yang digunakan organisasi saya .

  5. Masukkan Azure SQL Database di kotak pencarian dan pilih hasilnya.

  6. Di bawah Jenis izin apa yang diperlukan aplikasi Anda, pilih Izin yang didelegasikan, lalu pilih kotak centang di samping user_impersonation, lalu pilih Tambahkan izin.

    Cuplikan layar halaman Minta izin API memperlihatkan Izin yang didelegasikan, user_impersonation, dan tombol Tambahkan izin dipilih.

Pendaftaran aplikasi di Microsoft Entra sekarang memiliki izin yang diperlukan untuk terhubung ke SQL Database dengan meniru pengguna yang masuk.

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

Untuk mengonfigurasi aplikasi Anda untuk menyediakan token akses yang dapat digunakan untuk SQL Database, Anda menambahkan https://database.windows.net/user_impersonation sebagai scope penyedia Microsoft Entra loginParametersaplikasi . Perintah berikut menambahkan loginParameters properti dengan cakupan kustom ke pengaturan penyedia login identitas Microsoft Entra.

Dari cakupan yang diminta, App Service sudah meminta openid, , profiledan email cakupan secara default. Cakupan offline_access disertakan sehingga Anda dapat me-refresh token. Untuk informasi selengkapnya, lihat Cakupan OpenID Connect.

https://database.windows.net/user_impersonation Cakupan mengacu pada Azure SQL Database dan menyediakan JSON Web Token (JWT) yang menentukan SQL Database sebagai penerima token. Perintah ini menggunakan jq untuk pemrosesan JSON, yang sudah diinstal di Cloud Shell.

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"

Tips

Untuk mengonfigurasi cakupan yang diperlukan menggunakan antarmuka web alih-alih Azure CLI, gunakan Konfigurasikan penyedia Microsoft Entra untuk menyediakan token refresh, menambahkan https://database.windows.net/user_impersonation ke cakupan yang diminta.

Aplikasi Anda sekarang dikonfigurasi untuk menghasilkan token akses yang diterima SQL Database.

Catatan

Token akses kedaluwarsa setelah beberapa waktu. Untuk informasi tentang cara merefresh token akses Anda tanpa mengharuskan pengguna untuk mengautentikasi ulang dengan aplikasi Anda, lihat Menyegarkan token autentikasi.

5. Gunakan token akses dalam kode aplikasi Anda

Perbarui kode aplikasi Anda untuk menambahkan token akses yang disediakan oleh autentikasi App Service ke objek koneksi.

Catatan

Kode ini tidak berfungsi secara lokal. Untuk informasi selengkapnya dan alternatif untuk penelusuran kesalahan lokal, lihat Debug secara lokal saat Anda menggunakan autentikasi App Service.

  1. Di objek Anda DbContext di DatabaseContext.cs atau file lain yang mengonfigurasi konteks database, ubah konstruktor default untuk menambahkan token akses ID Microsoft Entra ke objek koneksi.

    public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor)
        : base(options)
    {
        var conn = Database.GetDbConnection() as SqlConnection;
        conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    }
    
  2. Jika Anda memiliki string koneksi yang dipanggil defaultConnection di App Service yang menggunakan autentikasi SQL dengan nama pengguna dan kata sandi, gunakan perintah berikut untuk menghapus rahasia koneksi. Ganti <group-name>, <app-name>, <db-server-name>, dan <db-name> dengan nilai Anda.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    

6. Terbitkan perubahan Anda

Jika Anda menggunakan Visual Studio Code di browser untuk membuat perubahan kode di fork GitHub, pilih Kontrol Sumber dari menu sebelah kiri. Masukkan pesan penerapan seperti OBO connect dan pilih Terapkan.

Commit tersebut memicu penerapan GitHub Actions ke App Service. Tunggu beberapa menit hingga penerapan selesai.

Anda juga dapat menerbitkan perubahan di Git Bash dengan menggunakan perintah berikut:

git commit -am "configure managed identity"
git push azure main

Jika kode Anda ada di Visual Studio:

  1. Klik kanan proyek Anda di Penjelajah Solusi dan pilih Terbitkan.

    Cuplikan layar memperlihatkan cara menerbitkan dari Penjelajah Solusi di Visual Studio.

  2. Pada halaman Terbitkan , pilih Terbitkan.

Saat halaman aplikasi baru menampilkan aplikasi Anda, aplikasi tersambung ke database Azure SQL atas nama pengguna Microsoft Entra yang masuk. Anda harus dapat menggunakan dan mengedit aplikasi seperti biasa.

Cuplikan layar yang memperlihatkan aplikasi web setelah penerbitan.

7. Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Saat Anda tidak lagi memerlukan sumber daya ini, hapus grup sumber daya dengan menjalankan perintah berikut:

az group delete --name <group-name>

Perintah ini mungkin perlu waktu untuk dijalankan.

Tanya jawab umum

Mengapa saya mendapatkan kesalahan "Gagal masuk untuk pengguna '<prinsipal> yang diidentifikasi token'"?

Penyebab paling umum untuk kesalahan Login failed for user '<token-identified principal>' adalah:

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

Untuk menambahkan lebih banyak pengguna atau grup, sambungkan ke server database Anda menggunakan sqlcmd atau SQL Server Management Studio (SSMS), dan buat pengguna database mandiri yang dipetakan ke identitas Microsoft Entra.

Contoh Transact-SQL berikut menambahkan identitas Microsoft Entra ke SQL Server dan memberikan identitas 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 Azure, kode dalam tutorial ini tidak berfungsi di lingkungan lokal Anda. Tidak seperti aplikasi yang berjalan di Azure, kode lokal Anda tidak mendapat manfaat dari middleware autentikasi App Service. Anda dapat menggunakan alternatif berikut untuk penelusuran kesalahan lokal:

  • Sambungkan ke SQL Database dari lingkungan lokal Anda dengan Active Directory Interactive autentikasi. Alur autentikasi ini tidak masuk ke pengguna itu sendiri, tetapi terhubung ke database back-end dengan pengguna yang masuk sehingga Anda dapat menguji otorisasi database secara lokal.
  • Salin token akses secara manual ke kode Anda sebagai pengganti X-MS-TOKEN-AAD-ACCESS-TOKEN header permintaan.
  • Jika Anda menyebarkan dari Visual Studio, gunakan debug 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.