Bagikan melalui


Mengautentikasi aplikasi Java yang dihost Azure

Artikel ini melihat bagaimana pustaka Azure Identity mendukung autentikasi token Microsoft Entra untuk aplikasi yang dihosting di Azure. Dukungan ini dimungkinkan melalui serangkaian TokenCredential implementasi, yang dibahas dalam artikel ini.

Artikel ini membahas subjek berikut:

Untuk memecahkan masalah autentikasi yang terkait dengan aplikasi yang dihosting Azure, lihat Memecahkan masalah autentikasi aplikasi yang dihosting Azure.

Kredensial Azure Default

DefaultAzureCredential sesuai untuk sebagian besar skenario di mana aplikasi pada akhirnya berjalan di Azure Cloud. DefaultAzureCredential menggabungkan kredensial yang biasa digunakan untuk mengautentikasi saat disebarkan, dengan kredensial yang digunakan untuk mengautentikasi di lingkungan pengembangan. DefaultAzureCredential mencoba untuk mengautentikasi melalui mekanisme berikut secara berurutan:

DefaultAzureCredential authentication flow

  • Lingkungan - DefaultAzureCredential membaca informasi akun yang ditentukan melalui variabel lingkungan dan menggunakannya untuk mengautentikasi.
  • Identitas Terkelola - Jika aplikasi disebarkan ke host Azure dengan Identitas Terkelola diaktifkan, DefaultAzureCredential autentikasi dengan akun tersebut.
  • IntelliJ - Jika Anda telah mengautentikasi melalui Azure Toolkit untuk IntelliJ, DefaultAzureCredential autentikasi dengan akun tersebut.
  • Visual Studio Code - Jika Anda telah mengautentikasi melalui plugin Akun Azure Visual Studio Code, DefaultAzureCredential autentikasi dengan akun tersebut.
  • Azure CLI - Jika Anda telah mengautentikasi akun melalui perintah Azure CLI az login , DefaultAzureCredential autentikasi dengan akun tersebut.

Mengonfigurasi DefaultAzureCredential

DefaultAzureCredential mendukung serangkaian konfigurasi melalui setter pada variabel DefaultAzureCredentialBuilder atau lingkungan.

  • Mengatur variabel AZURE_CLIENT_IDlingkungan , AZURE_CLIENT_SECRET, dan AZURE_TENANT_ID seperti yang didefinisikan dalam Variabel lingkungan dikonfigurasi DefaultAzureCredential untuk mengautentikasi sebagai perwakilan layanan yang ditentukan oleh nilai.
  • Pengaturan .managedIdentityClientId(String) pada penyusun atau variabel AZURE_CLIENT_ID lingkungan dikonfigurasi DefaultAzureCredential untuk mengautentikasi sebagai identitas terkelola yang ditentukan pengguna, sambil membiarkannya kosong mengonfigurasinya untuk mengautentikasi sebagai identitas terkelola yang ditetapkan sistem.
  • Pengaturan .tenantId(String) pada penyusun atau variabel AZURE_TENANT_ID lingkungan dikonfigurasi DefaultAzureCredential untuk mengautentikasi ke penyewa tertentu untuk cache token bersama, Visual Studio Code, dan IntelliJ IDEA.
  • Mengatur variabel AZURE_USERNAME lingkungan mengonfigurasi DefaultAzureCredential untuk memilih token cache yang sesuai dari cache token bersama.
  • Pengaturan .intelliJKeePassDatabasePath(String) pada penyusun mengonfigurasi DefaultAzureCredential untuk membaca file KeePass tertentu saat mengautentikasi dengan kredensial IntelliJ.

Mengautentikasi dengan DefaultAzureCredential

Contoh berikut menunjukkan autentikasi SecretClient dari pustaka klien azure-security-keyvault-secrets menggunakan DefaultAzureCredential.

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(new DefaultAzureCredentialBuilder().build())
  .buildClient();

Mengautentikasi identitas terkelola yang ditetapkan pengguna dengan DefaultAzureCredential

Contoh berikut menunjukkan autentikasi SecretClient dari pustaka klien azure-security-keyvault-secrets menggunakan DefaultAzureCredential yang disebarkan ke sumber daya Azure dengan identitas terkelola yang ditetapkan pengguna yang dikonfigurasi.

/**
 * The default credential uses the user-assigned managed identity with the specified client ID.
 */
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .managedIdentityClientId("<managed identity client ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Mengautentikasi pengguna di Azure Toolkit untuk IntelliJ dengan DefaultAzureCredential

Contoh berikut menunjukkan autentikasi SecretClient dari pustaka klien azure-security-keyvault-secrets menggunakan DefaultAzureCredential, di stasiun kerja tempat IntelliJ IDEA diinstal, dan pengguna telah masuk dengan akun Azure ke Azure Toolkit untuk IntelliJ.

Untuk informasi selengkapnya tentang mengonfigurasi IDE IntelliJ Anda, lihat Masuk Azure Toolkit for IntelliJ untuk IntelliJCredential.

/**
 * The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
 */
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Kredensial Identitas Terkelola

Identitas Terkelola mengautentikasi identitas terkelola (sistem atau pengguna yang ditetapkan) dari sumber daya Azure. Jadi, jika aplikasi berjalan di dalam sumber daya Azure yang mendukung Identitas Terkelola melalui IDENTITY/MSI, IMDS titik akhir, atau keduanya, kredensial ini membuat aplikasi Anda diautentikasi, dan menawarkan pengalaman autentikasi tanpa rahasia yang hebat.

Untuk informasi selengkapnya, lihat Apa yang dimaksud dengan identitas terkelola untuk sumber daya Azure?.

Mengautentikasi di Azure dengan identitas terkelola:

Contoh berikut menunjukkan autentikasi SecretClient dari pustaka klien azure-security-keyvault-secrets menggunakan ManagedIdentityCredential di mesin virtual, layanan aplikasi, aplikasi fungsi, Cloud Shell, kain layanan, busur, atau lingkungan AKS di Azure, dengan identitas terkelola yang ditetapkan sistem atau yang ditetapkan pengguna diaktifkan.

/**
 * Authenticate with a managed identity.
 */
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
  .clientId("<user-assigned managed identity client ID>") // required only for user-assigned
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(managedIdentityCredential)
  .buildClient();

Variabel lingkungan

Anda dapat mengonfigurasi DefaultAzureCredential dan EnvironmentCredential dengan variabel lingkungan. Setiap jenis autentikasi memerlukan nilai untuk variabel tertentu:

Perwakilan layanan dengan rahasia

Nama variabel Nilai
AZURE_CLIENT_ID ID aplikasi Microsoft Entra.
AZURE_TENANT_ID ID penyewa Microsoft Entra aplikasi.
AZURE_CLIENT_SECRET Salah satu rahasia klien aplikasi.

Perwakilan layanan dengan sertifikat

Nama variabel Nilai
AZURE_CLIENT_ID ID aplikasi Microsoft Entra.
AZURE_TENANT_ID ID penyewa Microsoft Entra aplikasi.
AZURE_CLIENT_CERTIFICATE_PATH Jalur ke file sertifikat yang dikodekan PEM termasuk kunci pribadi (tanpa perlindungan kata sandi).

Nama pengguna dan kata sandi

Nama variabel Nilai
AZURE_CLIENT_ID ID aplikasi Microsoft Entra.
AZURE_USERNAME Nama pengguna (biasanya alamat email).
AZURE_PASSWORD Kata sandi terkait untuk nama pengguna yang diberikan.

Konfigurasi dicoba dalam urutan ini. Misalnya, jika nilai untuk rahasia dan sertifikat klien keduanya ada, maka digunakan rahasia klien.

Langkah berikutnya

Artikel ini membahas autentikasi untuk aplikasi yang dihost di Azure. Bentuk autentikasi ini adalah salah satu dari beberapa cara yang dapat Anda gunakan untuk melakukan autentikasi di Azure SDK for Java. Artikel berikut menjelaskan cara yang lain:

Jika Anda mengalami masalah yang terkait dengan autentikasi aplikasi yang dihosting Azure, lihat Memecahkan masalah autentikasi aplikasi yang dihosting Azure.

Setelah Anda menguasai autentikasi, lihat Mengonfigurasi pengelogan di Azure SDK for Java untuk informasi tentang fungsi pencatatan yang disediakan oleh SDK.