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:
- 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_ID
lingkungan ,AZURE_CLIENT_SECRET
, danAZURE_TENANT_ID
seperti yang didefinisikan dalam Variabel lingkungan dikonfigurasiDefaultAzureCredential
untuk mengautentikasi sebagai perwakilan layanan yang ditentukan oleh nilai. - Pengaturan
.managedIdentityClientId(String)
pada penyusun atau variabelAZURE_CLIENT_ID
lingkungan dikonfigurasiDefaultAzureCredential
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 variabelAZURE_TENANT_ID
lingkungan dikonfigurasiDefaultAzureCredential
untuk mengautentikasi ke penyewa tertentu untuk cache token bersama, Visual Studio Code, dan IntelliJ IDEA. - Mengatur variabel
AZURE_USERNAME
lingkungan mengonfigurasiDefaultAzureCredential
untuk memilih token cache yang sesuai dari cache token bersama. - Pengaturan
.intelliJKeePassDatabasePath(String)
pada penyusun mengonfigurasiDefaultAzureCredential
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:
- Autentikasi Azure di lingkungan pengembangan
- Autentikasi dengan perwakilan layanan
- Autentikasi dengan kredensial pengguna
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.