Cara mengautentikasi aplikasi .NET ke layanan Azure menggunakan .NET Azure SDK

Saat aplikasi perlu mengakses sumber daya Azure seperti penyimpanan, brankas kunci, atau layanan kognitif, 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 Azure SDK untuk .NET.

Disarankan agar aplikasi menggunakan autentikasi berbasis token daripada string koneksi saat mengautentikasi ke sumber daya Azure. Azure SDK untuk .NET 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 dijalankan dan ditampilkan dalam diagram berikut.

Diagram yang menunjukkan strategi autentikasi berbasis token yang direkomendasikan untuk aplikasi tergantung tempat aplikasi dijalankan.

  • Saat pengembang menjalankan aplikasi selama pengembangan lokal - Aplikasi dapat mengautentikasi ke Azure menggunakan perwakilan layanan aplikasi untuk pengembangan lokal atau dengan menggunakan kredensial Azure pengembang. Masing-masing opsi ini dibahas secara lebih rinci di bagian autentikasi selama pengembangan lokal.
  • Saat aplikasi dihosting di Azure - Aplikasi harus mengautentikasi ke sumber daya Azure menggunakan identitas terkelola. Opsi ini dibahas secara lebih rinci di bawah ini di bagian autentikasi di lingkungan server.
  • Saat aplikasi dihosting dan disebarkan secara lokal - Aplikasi harus mengautentikasi ke sumber daya Azure menggunakan perwakilan layanan aplikasi. Opsi ini dibahas secara lebih rinci di bawah ini di bagian autentikasi di lingkungan server.

DefaultAzureCredential

Kelas DefaultAzureCredential yang disediakan oleh Azure SDK memungkinkan aplikasi menggunakan metode autentikasi yang berbeda tergantung pada lingkungan tempat aplikasi 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 harus lebih disukai daripada logika kondisional pengkodean manual atau bendera fitur untuk menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda.

Detail tentang menggunakan DefaultAzureCredential kelas dibahas nanti dalam artikel ini di bagian Gunakan DefaultAzureCredential dalam aplikasi.

Keuntungan autentikasi berbasis token

Autentikasi berbasis token sangat disarankan daripada menggunakan string koneksi saat membangun aplikasi untuk Azure. 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 istimewa paling sedikit. Sebaliknya, string koneksi memberikan hak penuh untuk 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 daripada yang dapat disusupi.
  • Paket Azure.Identity di Azure SDK mengelola token untuk Anda di belakang layar. Ini membuat penggunaan autentikasi berbasis token mudah digunakan sebagai string koneksi.

Penggunaan string koneksi harus terbatas pada bukti awal aplikasi konsep atau prototipe pengembangan yang tidak mengakses data produksi atau sensitif. Jika tidak, kelas autentikasi berbasis token yang tersedia di Azure SDK 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 perwakilan keamanan khusus yang dimaksudkan untuk mengidentifikasi dan mengautentikasi aplikasi ke Azure. Jenis perwakilan layanan yang akan digunakan untuk aplikasi Anda bergantung pada tempat aplikasi Anda berjalan.

Metode autentikasi Deskripsi
Aplikasi yang dihosting di Azure Aplikasi yang dihosting di Azure harus menggunakan perwakilan layanan Identitas Terkelola. 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 perwakilan layanan Aplikasi untuk aplikasi menggunakan proses pendaftaran Aplikasi. AZURE_CLIENT_ID, , AZURE_TENANT_IDdan AZURE_CLIENT_SECRET semuanya akan disimpan sebagai variabel lingkungan untuk dibaca oleh aplikasi pada 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 masih harus mengautentikasi ke setiap layanan Azure yang digunakan oleh aplikasi. Dua strategi utama untuk mengautentikasi aplikasi ke Azure selama pengembangan lokal adalah:

Metode autentikasi Deskripsi
Membuat objek perwakilan layanan aplikasi khusus yang akan digunakan selama pengembangan lokal Dalam metode ini, objek perwakilan 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 akan dijalankan aplikasi dalam produksi.

Menggunakan DefaultAzureCredential dalam aplikasi

DefaultAzureCredential mendukung beberapa metode autentikasi dan menentukan metode autentikasi yang digunakan saat runtime bahasa umum. Dengan cara ini, aplikasi Anda dapat menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda tanpa menerapkan kode khusus lingkungan.

Urutan dan lokasi di mana DefaultAzureCredential mencari kredensial ditemukan di DefaultAzureCredential.

Untuk mengimplementasikan DefaultAzureCredential, pertama-tama tambahkan Azure.Identity dan paket Microsoft.Extensions.Azure secara opsional ke aplikasi Anda. Anda dapat melakukan ini menggunakan baris perintah atau Manajer Paket NuGet.

Buka lingkungan terminal pilihan Anda di direktori proyek aplikasi dan masukkan perintah di bawah ini.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Layanan Azure umumnya diakses menggunakan kelas klien yang sesuai dari SDK. Kelas dan layanan kustom Anda sendiri harus terdaftar dalam file Program.cs sehingga dapat diakses melalui injeksi dependensi di seluruh aplikasi Anda. Di dalam Program.cs, ikuti langkah-langkah di bawah ini untuk menyiapkan dengan benar layanan Anda dan DefaultAzureCredential.

  1. Sertakan namespace layanan Azure.Identity dan Microsoft.Extensions.Azure dengan pernyataan penggunaan.
  2. Daftarkan layanan Azure menggunakan metode pembantu yang relevan.
  3. Teruskan instans DefaultAzureCredential objek ke UseCredential metode .

Contoh ini ditampilkan di segmen kode berikut.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

Atau, Anda juga dapat menggunakan DefaultAzureCredential layanan Anda secara lebih langsung tanpa bantuan metode pendaftaran Azure tambahan, seperti yang terlihat di bawah ini.

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Ketika kode di atas dijalankan di stasiun kerja lokal Anda selama pengembangan lokal, kode tersebut akan melihat variabel lingkungan untuk perwakilan layanan aplikasi atau di Visual Studio, VS Code, Azure CLI, atau Azure PowerShell untuk serangkaian kredensial pengembang, yang salah satunya 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.

Menjelajahi urutan metode autentikasi DefaultAzureCredential

Secara internal, DefaultAzureCredential menerapkan rantai penyedia info masuk untuk mengautentikasi aplikasi ke sumber daya Azure. Setiap penyedia kredensial dapat mendeteksi apakah kredensial jenis tersebut dikonfigurasi untuk aplikasi. DefaultAzureCredential secara berurutan memeriksa setiap penyedia secara berurutan dan menggunakan kredensial dari penyedia pertama yang memiliki kredensial yang dikonfigurasi.

Urutan dan lokasi di mana DefaultAzureCredential mencari kredensial ditemukan di DefaultAzureCredential.

Jenis Informasi masuk Deskripsi
Perwakilan layanan aplikasi DefaultAzureCredential membaca sekumpulan variabel lingkungan untuk menentukan apakah perwakilan layanan aplikasi (pengguna aplikasi) telah ditetapkan untuk aplikasi. Jika demikian, DefaultAzureCredential gunakan nilai-nilai ini untuk mengautentikasi aplikasi ke Azure.

Metode ini paling sering digunakan di lingkungan server tetapi juga dapat digunakan saat mengembangkan secara lokal.
Identitas Terkelola Jika aplikasi disebarkan ke host Azure dengan Identitas Terkelola diaktifkan, DefaultAzureCredential akan mengautentikasi aplikasi ke Azure menggunakan Identitas Terkelola tersebut. Autentikasi menggunakan Identitas Terkelola dibahas di bagian Autentikasi di lingkungan server dokumen ini.

Metode ini hanya tersedia saat aplikasi dihosting di Azure menggunakan layanan seperti Azure App Service, Azure Functions, atau Azure Virtual Machines.
Visual Studio Jika pengembang telah mengautentikasi ke Azure dengan masuk ke Visual Studio, DefaultAzureCredential akan mengautentikasi aplikasi ke Azure menggunakan akun yang sama.
Visual Studio Code Jika pengembang telah mengautentikasi ke Azure menggunakan plugin Akun Azure Visual Studio Code, DefaultAzureCredential akan mengautentikasi aplikasi ke Azure menggunakan akun yang sama.
Azure CLI Jika pengembang telah mengautentikasi ke Azure menggunakan az login perintah di Azure CLI, DefaultAzureCredential akan mengautentikasi aplikasi ke Azure menggunakan akun yang sama.
Azure PowerShell Jika pengembang telah mengautentikasi ke Azure menggunakan Connect-AzAccount cmdlet dari Azure PowerShell, DefaultAzureCredential akan mengautentikasi aplikasi ke Azure menggunakan akun yang sama.
Interaktif Jika diaktifkan, DefaultAzureCredential akan secara interaktif mengautentikasi pengembang melalui browser default sistem saat ini. Secara default, opsi ini dinonaktifkan.