Mengautentikasi ke sumber daya Azure dari aplikasi .NET yang dihosting secara lokal
Aplikasi yang dihosting di luar Azure (misalnya, lokal atau di pusat data pihak ketiga) harus menggunakan perwakilan layanan aplikasi untuk mengautentikasi ke Azure saat mengakses sumber daya Azure. Objek perwakilan layanan aplikasi dibuat menggunakan proses pendaftaran aplikasi di Azure. Saat perwakilan layanan aplikasi dibuat, ID klien dan rahasia klien akan dibuat untuk aplikasi Anda. ID klien, rahasia klien, dan ID penyewa Anda kemudian disimpan dalam variabel lingkungan sehingga dapat digunakan oleh pustaka Identitas Azure untuk mengautentikasi aplikasi Anda ke Azure saat runtime.
Pendaftaran aplikasi yang berbeda harus dibuat untuk setiap lingkungan tempat aplikasi dihosting. Ini memungkinkan izin sumber daya khusus lingkungan dikonfigurasi untuk setiap perwakilan layanan dan memastikan aplikasi yang disebarkan ke satu lingkungan tidak berbicara dengan sumber daya Azure yang merupakan bagian dari lingkungan lain.
1 - Mendaftarkan aplikasi di Azure
Aplikasi dapat didaftarkan dengan Azure menggunakan portal Microsoft Azure atau Azure CLI.
Masuk ke portal Azure dan ikuti langkah-langkah berikut.
2 - Menetapkan peran ke perwakilan layanan aplikasi
Selanjutnya, Anda perlu menentukan peran (izin) apa yang dibutuhkan aplikasi Anda pada sumber daya apa dan menetapkan peran tersebut ke aplikasi Anda. Peran dapat diberi peran di sumber daya, grup sumber daya, atau cakupan langganan. Contoh ini menunjukkan cara menetapkan peran untuk perwakilan layanan di cakupan grup sumber daya, karena sebagian besar aplikasi mengelompokkan semua sumber daya Azure mereka ke dalam satu grup sumber daya.
3 - Mengonfigurasi variabel lingkungan untuk aplikasi
Objek DefaultAzureCredential
akan mencari mandat perwakilan layanan dalam himpunan variabel lingkungan saat runtime bahasa umum. Ada beberapa cara untuk mengonfigurasi variabel lingkungan saat bekerja dengan .NET tergantung pada alat dan lingkungan Anda.
Terlepas dari pendekatan mana yang Anda pilih, konfigurasikan variabel lingkungan berikut saat bekerja dengan perwakilan layanan:
AZURE_CLIENT_ID
→ Nilai ID aplikasi.AZURE_TENANT_ID
→ Nilai ID penyewa.AZURE_CLIENT_SECRET
→ Kata sandi/mandat yang dihasilkan untuk aplikasi.
Jika aplikasi Anda dihosting di IIS, disarankan agar Anda mengatur variabel lingkungan per kumpulan aplikasi untuk mengisolasi pengaturan antar aplikasi.
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost
Anda juga dapat mengonfigurasi pengaturan ini secara langsung menggunakan elemen di applicationPools
dalam applicationHost.config
file:
<applicationPools>
<add name="CorePool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
<environmentVariables>
<add name="ASPNETCORE_ENVIRONMENT" value="Development" />
<add name="AZURE_CLIENT_ID" value="00000000-0000-0000-0000-000000000000" />
<add name="AZURE_TENANT_ID" value="11111111-1111-1111-1111-111111111111" />
<add name="AZURE_CLIENT_SECRET" value="=abcdefghijklmnopqrstuvwxyz" />
</environmentVariables>
</add>
</applicationPools>
4 - Menerapkan DefaultAzureCredential di aplikasi Anda
DefaultAzureCredential adalah urutan mekanisme yang diurutkan dan diurutkan untuk mengautentikasi ke Microsoft Entra. Setiap mekanisme autentikasi adalah kelas yang berasal dari kelas TokenCredential dan dikenal sebagai kredensial. Pada runtime, DefaultAzureCredential
upaya untuk 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.
Urutan dan lokasi di mana DefaultAzureCredential
mencari kredensial ditemukan di DefaultAzureCredential.
Untuk menggunakan DefaultAzureCredential
, tambahkan Azure.Identity dan secara opsional paket Microsoft.Extensions.Azure ke aplikasi Anda:
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
Azure.Identity
namespace layanan danMicrosoft.Extensions.Azure
melaluiusing
arahan. - Daftarkan klien layanan Azure menggunakan metode ekstensi -awalan
Add
yang sesuai. - Teruskan instans
DefaultAzureCredential
keUseCredential
metode .
Contohnya:
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());
});
Alternatifnya UseCredential
adalah membuat instans 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 berjalan di stasiun kerja pengembangan lokal Anda, kode tersebut akan melihat variabel lingkungan untuk perwakilan layanan aplikasi atau di alat pengembang yang diinstal secara lokal, seperti Visual Studio, untuk 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.