Cara mengautentikasi aplikasi JavaScript ke layanan Azure menggunakan Azure SDK for JavaScript

Saat aplikasi perlu mengakses sumber daya Azure (seperti Storage, Key vault, atau Cognitive services) 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 JavaScript.

Proses yang disarankan adalah meminta aplikasi Anda menggunakan autentikasi berbasis token, bukan string koneksi atau kunci, saat mengautentikasi ke sumber daya Azure. Azure SDK menyediakan 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.

Lingkungan Autentikasi
Lokal 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.
Azure 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.
Lokal 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.

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

Keuntungan autentikasi berbasis token

Saat membangun aplikasi untuk Azure, autentikasi berbasis token sangat direkomendasikan daripada rahasia (string koneksi atau kunci). Autentikasi berbasis token disediakan dengan DefaultAzureCredential.

Autentikasi berbasis token Rahasia (string koneksi dan kunci)
Prinsip hak istimewa paling sedikit, menetapkan izin khusus yang diperlukan oleh aplikasi pada sumber daya Azure. String koneksi atau kunci memberikan hak penuh ke sumber daya Azure.
Tidak ada rahasia aplikasi untuk disimpan. Harus menyimpan dan memutar rahasia dalam pengaturan aplikasi atau variabel lingkungan.
Azure Identity SDK mengelola token untuk Anda di belakang layar. Ini membuat penggunaan autentikasi berbasis token mudah digunakan sebagai string koneksi. Rahasia tidak dikelola.

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.

Gunakan SDK berikut:

DefaultAzureCredential

Metode Azure SDK DefaultAzureCredential memungkinkan aplikasi menggunakan metode autentikasi yang berbeda tergantung pada lingkungan tempat aplikasi dijalankan. Ini memungkinkan aplikasi untuk menyebarkan di lingkungan lokal, pengujian, dan produksi tanpa perubahan kode. Anda mengonfigurasi metode autentikasi yang sesuai untuk setiap lingkungan dan DefaultAzureCredential secara otomatis mendeteksi dan menggunakan metode autentikasi tersebut. Penggunaan DefaultAzureCredential lebih disukai daripada logika kondisional pengkodean manual atau bendera fitur untuk menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda.

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

Autentikasi di lingkungan server

Saat menghosting di lingkungan server, setiap aplikasi harus diberi identitas aplikasi unik per lingkungan. 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.

Autentikasi selama pengembangan lokal

Saat aplikasi dijalankan di stasiun kerja pengembang selama pengembangan lokal, lingkungan lokal harus tetap mengautentikasi ke layanan Azure apa pun yang digunakan oleh aplikasi.

Menggunakan DefaultAzureCredential dalam aplikasi

Untuk menggunakan DefaultAzureCredential di aplikasi JavaScript, tambahkan paket @azure/identitas ke aplikasi Anda.

npm install @azure/identity

Kemudian, contoh kode berikut menunjukkan cara membuat instans DefaultAzureCredential objek dan menggunakannya dengan kelas klien Azure SDK, dalam hal ini BlobServiceClient yang digunakan untuk mengakses penyimpanan Blob.

// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.windows.net`,
  new DefaultAzureCredential()
);

DefaultAzureCredential akan secara otomatis mendeteksi mekanisme autentikasi yang dikonfigurasi untuk aplikasi dan mendapatkan token yang diperlukan untuk mengautentikasi aplikasi ke Azure. Jika aplikasi menggunakan lebih dari satu klien SDK, objek kredensial yang sama dapat digunakan dengan setiap objek klien SDK.

Urutan memilih metode autentikasi saat menggunakan DefaultAzureCredential

Secara internal, DefaultAzureCredential menerapkan rantai pemilihan penyedia kredensial 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.

Jika Anda memiliki lebih dari satu kredensial yang dikonfigurasi, urutan menemukan kredensial melalui rantai penting.

Urutan di mana DefaultAzureCredential mencari kredensial untuk JavaScript diperlihatkan dalam diagram dan tabel di bawah ini.

Diagram yang menunjukkan urutan di mana DefaultAzureCredential memeriksa untuk melihat sumber autentikasi apa yang dikonfigurasi untuk aplikasi.

Ada dua jalur:

  • Layanan yang disebarkan (Azure atau lokal): urutan dimulai dengan variabel lingkungan, lalu identitas terkelola, lalu lokasi lainnya untuk kredensial (Visual Studio Code, Azure CLI, Azure PowerShell).
  • Lingkungan lokal pengembang: Rantai stasiun kerja pengembang lokal dimulai dengan pengguna Azure visual Studio Code yang masuk, ditampilkan di bilah bawah IDE, lalu beralih ke Azure CLI, lalu Azure PowerShell. Penting untuk dipahami jika Anda telah mengonfigurasi variabel lingkungan lokal, baik untuk seluruh lingkungan Anda, atau lingkungan virtual proyek (seperti dengan DOTENV), variabel ini akan mengambil alih rantai Visual Studio Code -> Azure CLI -> PowerShell karena merupakan kredensial pertama yang diperiksa dalam rantai.
Jenis Informasi masuk Deskripsi
Lingkungan 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 yang diaktifkan identitas terkelola.
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 mengautentikasi pengembang secara interaktif melalui browser default sistem saat ini. Secara default, opsi ini dinonaktifkan.