Mengautentikasi aplikasi .NET ke layanan Azure menggunakan gambaran umum pustaka Azure Identity
Saat aplikasi perlu mengakses sumber daya Azure, aplikasi harus diautentikasi ke Azure. Ini berlaku untuk semua aplikasi, baik yang disebarkan ke Azure, disebarkan secara lokal, atau sedang dalam pengembangan di stasiun kerja pengembang lokal. Artikel ini menjelaskan pendekatan yang direkomendasikan untuk mengautentikasi aplikasi ke Azure saat menggunakan pustaka klien Azure SDK.
Pendekatan autentikasi aplikasi yang direkomendasikan
Disarankan agar aplikasi menggunakan autentikasi berbasis token daripada string koneksi saat mengautentikasi ke sumber daya Azure. Pustaka Azure Identity menyediakan kelas yang mendukung autentikasi berbasis token dan memungkinkan aplikasi mengautentikasi ke sumber daya Azure dengan lancar baik aplikasi dalam pengembangan lokal, disebarkan ke Azure, atau disebarkan ke server lokal.
Jenis autentikasi berbasis token tertentu yang harus digunakan aplikasi untuk mengautentikasi ke sumber daya Azure bergantung pada tempat aplikasi berjalan dan ditampilkan dalam diagram berikut:
Saat aplikasi:
- Berfungsi secara lokal selama pengembangan, aplikasi dapat mengautentikasi ke Azure menggunakan prinsipal layanan aplikasi untuk pengembangan lokal atau dengan menggunakan kredensial Azure pengembang. Setiap opsi dibahas secara lebih rinci pada autentikasi selama pengembangan lokal.
- Dihosting di Azure, aplikasi harus mengautentikasi ke sumber daya Azure menggunakan identitas terkelola. Opsi ini dibahas secara lebih rinci pada autentikasi di lingkungan server.
- Di-hosting dan di-deploy secara lokal, aplikasi harus mengautentikasi ke sumber daya Azure menggunakan prinsipal layanan aplikasi. Opsi ini dibahas secara lebih rinci pada autentikasi di lingkungan server.
DefaultAzureCredential
Kelas DefaultAzureCredential yang disediakan oleh pustaka Identitas Azure memungkinkan aplikasi menggunakan metode autentikasi yang berbeda tergantung pada lingkungan tempat mereka dijalankan. Ini memungkinkan aplikasi dipromosikan dari pengembangan lokal ke lingkungan pengujian ke produksi tanpa perubahan kode. Anda mengonfigurasi metode autentikasi yang sesuai untuk setiap lingkungan, dan DefaultAzureCredential
akan secara otomatis mendeteksi dan menggunakan metode autentikasi tersebut. Penggunaan DefaultAzureCredential
lebih diutamakan daripada pengkodean manual logika kondisional atau flag fitur untuk menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda.
Detail tentang menggunakan DefaultAzureCredential
tercakup dalam Gunakan DefaultAzureCredential
dalam aplikasi.
Keuntungan autentikasi berbasis token
Autentikasi berbasis token menawarkan keuntungan berikut daripada mengautentikasi dengan string koneksi:
- Metode autentikasi berbasis token yang dijelaskan di bawah ini memungkinkan Anda membuat izin khusus yang diperlukan oleh aplikasi pada sumber daya Azure. Ini mengikuti prinsip hak akses minimum. Sebaliknya, string koneksi memberikan hak penuh ke sumber daya Azure.
- Sedangkan siapa pun atau aplikasi apa pun dengan string koneksi dapat terhubung ke sumber daya Azure, metode autentikasi berbasis token mencakup akses ke sumber daya hanya ke aplikasi yang dimaksudkan untuk mengakses sumber daya.
- Dalam kasus identitas terkelola, tidak ada rahasia aplikasi untuk disimpan. Ini membuat aplikasi lebih aman karena tidak ada string koneksi atau rahasia aplikasi yang dapat disusupi.
- Paket Azure.Identity memperoleh dan mengelola token Microsoft Entra untuk Anda. Ini membuat penggunaan autentikasi berbasis token mudah digunakan sebagai string koneksi.
Penggunaan string koneksi harus terbatas pada aplikasi bukti konsep awal atau prototipe pengembangan yang tidak mengakses data produksi atau sensitif. Jika tidak, kelas autentikasi berbasis token yang tersedia di pustaka Azure Identity harus selalu disukai saat mengautentikasi ke sumber daya Azure.
Autentikasi di lingkungan server
Saat menghosting di lingkungan server, setiap aplikasi harus diberi identitas aplikasi unik per lingkungan tempat aplikasi dijalankan. Di Azure, identitas aplikasi diwakili oleh perwakilan layanan, jenis khusus prinsip keamanan yang dimaksudkan untuk mengidentifikasi dan mengautentikasi aplikasi ke Azure. Jenis perwakilan layanan yang akan digunakan untuk aplikasi Anda bergantung pada tempat aplikasi Anda dijalankan.
Metode autentikasi | Deskripsi |
---|---|
Aplikasi yang dihosting di Azure | Aplikasi yang dihosting di Azure harus menggunakan prinsipal layanan Managed Identity . Identitas terkelola dirancang untuk mewakili identitas aplikasi yang dihosting di Azure dan hanya dapat digunakan dengan aplikasi yang dihosting Azure. Misalnya, aplikasi web .NET yang dihosting di Azure App Service akan diberi Identitas Terkelola. Identitas Terkelola yang ditetapkan ke aplikasi kemudian akan digunakan untuk mengautentikasi aplikasi ke layanan Azure lainnya. |
Aplikasi yang dihosting di luar Azure (misalnya, aplikasi lokal) |
Aplikasi yang dihosting di luar Azure (misalnya aplikasi lokal) yang perlu terhubung ke layanan Azure harus menggunakan perwakilan layanan Aplikasi . Perwakilan layanan Aplikasi mewakili identitas aplikasi di Azure dan dibuat melalui proses pendaftaran aplikasi. Misalnya, pertimbangkan aplikasi web .NET yang dihosting secara lokal yang menggunakan Azure Blob Storage. Anda akan membuat prinsipal layanan aplikasi untuk app menggunakan proses pendaftaran aplikasi. AZURE_CLIENT_ID , AZURE_TENANT_ID , dan AZURE_CLIENT_SECRET semuanya akan disimpan sebagai variabel lingkungan agar dapat dibaca oleh aplikasi saat runtime dan memungkinkan aplikasi untuk mengautentikasi ke Azure menggunakan perwakilan layanan aplikasi. |
Autentikasi selama pengembangan lokal
Saat aplikasi dijalankan di stasiun kerja pengembang selama pengembangan lokal, aplikasi harus tetap mengautentikasi ke layanan Azure apa pun yang digunakan oleh aplikasi. Dua strategi utama untuk mengautentikasi aplikasi ke Azure selama pengembangan lokal adalah:
Metode autentikasi | Deskripsi |
---|---|
Buat objek principal layanan aplikasi khusus yang digunakan untuk pengembangan lokal. | Dalam metode ini, objek principal layanan aplikasi khusus disiapkan menggunakan proses pendaftaran aplikasi untuk digunakan selama pengembangan lokal. Identitas perwakilan layanan kemudian disimpan sebagai variabel lingkungan untuk diakses oleh aplikasi saat dijalankan dalam pengembangan lokal. Metode ini memungkinkan Anda menetapkan izin sumber daya tertentu yang diperlukan oleh aplikasi ke objek perwakilan layanan yang digunakan oleh pengembang selama pengembangan lokal. Ini memastikan aplikasi hanya memiliki akses ke sumber daya tertentu yang dibutuhkan dan mereplikasi izin yang akan dimiliki aplikasi dalam produksi. Kelemahan dari pendekatan ini adalah kebutuhan untuk membuat objek perwakilan layanan terpisah untuk setiap pengembang yang bekerja pada aplikasi. |
Mengautentikasi aplikasi ke Azure menggunakan kredensial pengembang selama pengembangan lokal | Dalam metode ini, pengembang harus masuk ke Azure dari Visual Studio, ekstensi Alat Azure untuk Visual Studio Code, Azure CLI, atau Azure PowerShell di stasiun kerja lokal mereka. Aplikasi kemudian dapat mengakses kredensial pengembang dari penyimpanan kredensial dan menggunakan kredensial tersebut untuk mengakses sumber daya Azure dari aplikasi. Metode ini memiliki keuntungan dari penyiapan yang lebih mudah karena pengembang hanya perlu masuk ke akun Azure mereka dari Visual Studio, VS Code, atau Azure CLI. Kerugian dari pendekatan ini adalah bahwa akun pengembang kemungkinan memiliki lebih banyak izin daripada yang diperlukan oleh aplikasi. Oleh karena itu, pendekatan ini tidak secara akurat mereplikasi izin yang digunakan aplikasi pada saat produksi. |
Menggunakan DefaultAzureCredential dalam aplikasi
DefaultAzureCredential adalah urutan mekanisme yang terurut dan memiliki preferensi untuk mengautentikasi ke Microsoft Entra ID. Setiap mekanisme autentikasi adalah kelas yang berasal dari kelas TokenCredential dan dikenal sebagai kredensial. Saat runtime, DefaultAzureCredential
mencoba mengautentikasi menggunakan kredensial pertama. Jika kredensial tersebut gagal memperoleh token akses, kredensial berikutnya dalam urutan dicoba, dan sebagainya, hingga token akses berhasil diperoleh. Dengan cara ini, aplikasi Anda dapat menggunakan kredensial yang berbeda di lingkungan yang berbeda tanpa menulis kode khusus lingkungan.
Untuk menggunakan DefaultAzureCredential
, tambahkan Azure.Identity dan secara opsional paket Microsoft.Extensions.Azure ke aplikasi Anda:
- Baris Perintah
- Pengelola Paket NuGet
Di terminal pilihan Anda, navigasikan ke direktori proyek aplikasi dan jalankan perintah berikut:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Layanan Azure diakses menggunakan kelas klien khusus dari berbagai pustaka klien Azure SDK. Kelas-kelas ini dan layanan kustom Anda sendiri harus didaftarkan sehingga dapat diakses melalui injeksi dependensi di seluruh aplikasi Anda. Di Program.cs
, selesaikan langkah-langkah berikut untuk mendaftarkan kelas klien dan DefaultAzureCredential
:
- Sertakan namespace
Azure.Identity
danMicrosoft.Extensions.Azure
melalui arahanusing
. - Daftarkan klien layanan Azure menggunakan metode ekstensi dengan awalan
Add
yang sesuai. - Masukkan instans
DefaultAzureCredential
ke metodeUseCredential
.
Misalnya:
using Microsoft.Extensions.Azure;
using Azure.Identity;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});
Alternatif untuk UseCredential
adalah menginstansiasi DefaultAzureCredential
secara langsung.
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
Saat kode sebelumnya dijalankan di stasiun kerja pengembangan lokal Anda, ini akan mencari variabel lingkungan untuk mendapatkan prinsip layanan aplikasi atau pada alat pengembang yang diinstal secara lokal, seperti Visual Studio, untuk menemukan serangkaian kredensial pengembang. Salah satu pendekatan dapat digunakan untuk mengautentikasi aplikasi ke sumber daya Azure selama pengembangan lokal.
Saat disebarkan ke Azure, kode yang sama ini juga dapat mengautentikasi aplikasi Anda ke sumber daya Azure lainnya.
DefaultAzureCredential
dapat mengambil pengaturan lingkungan dan konfigurasi identitas terkelola untuk mengautentikasi ke layanan lain secara otomatis.