Memecahkan masalah autentikasi aplikasi yang dihosting Azure
Artikel ini menyediakan panduan tentang menangani masalah yang dihadapi saat mengautentikasi Azure SDK untuk aplikasi Java yang dihosting di Azure, melalui berbagai TokenCredential
implementasi. Untuk informasi selengkapnya, lihat Mengautentikasi aplikasi Java yang dihosting Azure.
Memecahkan Masalah DefaultAzureCredential
Ketika Anda menggunakan DefaultAzureCredential
, Anda dapat secara opsional mencoba/menangkap untuk CredentialUnavailableException
. Tabel berikut menunjukkan kesalahan yang ditunjukkan pengecualian ini, dan metode mitigasi:
Pesan kesalahan | Deskripsi | Mitigasi |
---|---|---|
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." |
Semua kredensial dalam DefaultAzureCredential rantai gagal mengambil token, masing-masing melempar CredentialUnavailableException . |
Aktifkan pengelogan untuk memverifikasi kredensial yang sedang dicoba, dan dapatkan informasi diagnostik lebih lanjut. Untuk informasi selengkapnya, lihat panduan pemecahan masalah untuk salah satu jenis kredensial yang mendasar berikut ini: - EnvironmentCredential - ManagedIdentityCredential - VisualStudioCodeCredential - AzureCLICredential - AzurePowershellCredential |
HttpResponseException raised from the client with a status code of 401 or 403 |
Autentikasi berhasil tetapi layanan Azure otorisasi merespons dengan kode status 401 (Autentikasi), atau 403 (Terlarang). Masalah ini sering terjadi ketika DefaultAzureCredential mengautentikasi akun selain akun yang dimaksudkan atau akun yang dimaksudkan tidak memiliki izin atau peran yang benar yang ditetapkan. |
Aktifkan pengelogan untuk menentukan kredensial mana dalam rantai yang mengembalikan token autentikasi. Dalam kasus di mana kredensial selain yang diharapkan mengembalikan token, lihat untuk melewati masalah ini dengan keluar dari alat pengembangan yang sesuai. Pastikan bahwa peran yang benar ditetapkan ke akun yang digunakan. Misalnya, peran khusus layanan daripada peran Pemilik langganan. |
Memecahkan Masalah EnvironmentCredential
Ketika Anda menggunakan EnvironmentCredential
, Anda dapat secara opsional mencoba/menangkap untuk CredentialUnavailableException
. Tabel berikut menunjukkan kesalahan yang ditunjukkan pengecualian ini, dan metode mitigasi:
Pesan kesalahan | Deskripsi | Mitigasi |
---|---|---|
Environment variables aren't fully configured. |
Kombinasi variabel lingkungan yang valid tidak diatur. | Pastikan bahwa variabel lingkungan yang sesuai diatur sebelum pengaktifan aplikasi untuk metode autentikasi yang dimaksudkan, seperti yang dijelaskan dalam daftar berikut: - Untuk mengautentikasi perwakilan layanan menggunakan rahasia klien, pastikan bahwa variabel AZURE_CLIENT_ID , AZURE_TENANT_ID , dan AZURE_CLIENT_SECRET diatur dengan benar. - Untuk mengautentikasi perwakilan layanan menggunakan sertifikat, pastikan bahwa variabel AZURE_CLIENT_ID , , AZURE_TENANT_ID AZURE_CLIENT_CERTIFICATE_PATH , dan secara AZURE_CLIENT_CERTIFICATE_PASSWORD opsional diatur dengan benar. - Untuk mengautentikasi pengguna menggunakan kata sandi, pastikan bahwa variabel AZURE_USERNAME dan AZURE_PASSWORD diatur dengan benar. |
Memecahkan masalah ManagedIdentityCredential
ManagedIdentityCredential
dirancang untuk bekerja pada berbagai host Azure yang menyediakan identitas terkelola. Mengonfigurasi identitas terkelola dan kegagalan pemecahan masalah bervariasi dari host ke host. Daftar berikut ini memperlihatkan lingkungan host Azure yang dapat Anda tetapkan identitas terkelola dan yang ManagedIdentityCredential
mendukung:
- Azure App Service dan Azure Functions - pemecahan masalah konfigurasi -
- Azure Arc - konfigurasi
- Azure Kubernetes Service - pemecahan masalah konfigurasi -
- Azure Service Fabric -configuration
- Azure Virtual Machines dan Scale Sets -configuration - troubleshooting
Identitas Terkelola Mesin Virtual Azure
Ketika Anda menggunakan ManagedIdentityCredential
, Anda dapat secara opsional mencoba/menangkap untuk CredentialUnavailableException
. Tabel berikut menunjukkan kesalahan yang ditunjukkan pengecualian ini, dan metode mitigasi:
Pesan kesalahan | Deskripsi | Mitigasi |
---|---|---|
The requested identity hasn't been assigned to this resource. |
Titik akhir Azure Instance Metadata Service (IMDS) merespons dengan kode status 400, yang menunjukkan identitas yang diminta tidak ditetapkan ke komputer virtual (VM). | Jika Anda menggunakan identitas yang ditetapkan pengguna, pastikan identitas yang ditentukan clientId sudah benar. Jika Anda menggunakan identitas yang ditetapkan sistem, pastikan Anda telah mengaktifkannya dengan benar. Untuk informasi selengkapnya, lihat bagian Mengaktifkan identitas terkelola yang ditetapkan sistem pada VM yang ada di Mengonfigurasi identitas terkelola untuk sumber daya Azure pada VM menggunakan portal Azure. |
The request failed due to a gateway error. |
Permintaan ke titik akhir IMDS gagal karena kesalahan gateway, kode status 502 atau 504. | IMDS tidak mendukung panggilan melalui proksi atau gateway. Menonaktifkan proksi atau gateway yang berjalan di VM untuk panggilan ke titik akhir IMDS http://169.254.169.254/ |
No response received from the managed identity endpoint. |
Tidak ada respons yang diterima untuk permintaan ke IMDS atau waktu permintaan habis. | - Pastikan Anda telah mengonfigurasi identitas terkelola dengan benar pada VM. Untuk informasi selengkapnya, lihat Mengonfigurasi identitas terkelola untuk sumber daya Azure pada VM menggunakan portal Azure. - Verifikasi bahwa titik akhir IMDS dapat dijangkau pada VM. Untuk informasi selengkapnya, lihat bagian berikutnya. |
Multiple attempts failed to obtain a token from the managed identity endpoint. |
Coba lagi untuk mengambil token dari titik akhir IMDS telah habis. | - Untuk informasi selengkapnya tentang kegagalan tertentu, lihat pesan pengecualian dalam. Jika data telah dipotong, detail lebih lanjut dapat diperoleh dengan mengumpulkan log. - Pastikan Anda telah mengonfigurasi identitas terkelola dengan benar pada VM. Untuk informasi selengkapnya, lihat Mengonfigurasi identitas terkelola untuk sumber daya Azure pada VM menggunakan portal Azure. - Verifikasi bahwa titik akhir IMDS dapat dijangkau pada VM. Untuk informasi selengkapnya, lihat bagian berikutnya. |
Verifikasi bahwa IMDS tersedia di VM
Jika Anda memiliki akses ke VM, Anda dapat memverifikasi bahwa titik akhir identitas yang di-manged tersedia melalui baris perintah menggunakan curl
, seperti yang ditunjukkan dalam contoh berikut:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
Peringatan
Output perintah ini berisi token akses yang valid. Untuk menghindari penyusupan keamanan akun, jangan bagikan token akses ini.
Identitas Terkelola Azure Functions dan Azure App Service
Ketika Anda menggunakan ManagedIdentityCredential
, Anda dapat secara opsional mencoba/menangkap untuk CredentialUnavailableException
. Tabel berikut menunjukkan kesalahan yang ditunjukkan pengecualian ini, dan metode mitigasi:
Pesan kesalahan | Deskripsi | Mitigasi |
---|---|---|
ManagedIdentityCredential authentication unavailable. |
Variabel lingkungan yang dikonfigurasi oleh host App Services tidak ada. | - Pastikan Anda telah mengonfigurasi identitas terkelola dengan benar pada instans App Service. Untuk informasi selengkapnya, lihat Cara menggunakan identitas terkelola untuk App Service dan Azure Functions. - Verifikasi bahwa Anda telah mengonfigurasi lingkungan App Service dengan benar dan bahwa titik akhir identitas terkelola tersedia. Untuk informasi selengkapnya, lihat bagian berikutnya. |
Verifikasi bahwa titik akhir Identitas Terkelola App Service tersedia
Jika Anda memiliki akses ke SSH ke instans App Service, Anda dapat memverifikasi bahwa identitas terkelola tersedia di lingkungan. Pertama, pastikan Anda telah mengatur variabel MSI_ENDPOINT
lingkungan dan MSI_SECRET
di lingkungan. Kemudian, Anda dapat memverifikasi bahwa titik akhir identitas terkelola tersedia menggunakan curl
, seperti yang ditunjukkan dalam contoh berikut:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
Peringatan
Output perintah ini berisi token akses yang valid. Untuk menghindari penyusupan keamanan akun, jangan bagikan token akses ini.
Identitas Terkelola Azure Kubernetes Service
Identitas Pod untuk Kubernetes
Ketika Anda menggunakan ManagedIdentityCredential
, Anda dapat secara opsional mencoba/menangkap untuk CredentialUnavailableException
. Tabel berikut menunjukkan kesalahan yang ditunjukkan pengecualian ini, dan metode mitigasi:
Pesan kesalahan | Deskripsi | Mitigasi |
---|---|---|
No Managed Identity endpoint found |
Aplikasi mencoba mengautentikasi sebelum identitas ditetapkan ke podnya. | Verifikasi bahwa pod diberi label dengan benar. Masalah ini juga terjadi ketika pod berlabel benar mengautentikasi sebelum identitas siap. Untuk mencegah balapan inisialisasi, konfigurasikan NMI untuk mengatur Retry-After header dalam responsnya. Untuk informasi selengkapnya, lihat Mengatur header Retry-After dalam respons NMI dalam dokumentasi Identitas Pod. |
Memecahkan masalah WorkloadIdentityCredential
Ketika Anda menggunakan WorkloadIdentityCredential
, Anda dapat secara opsional mencoba/menangkap untuk CredentialUnavailableException
. Tabel berikut menunjukkan kesalahan yang ditunjukkan pengecualian ini, dan metode mitigasi:
Pesan kesalahan | Deskripsi | Mitigasi |
---|---|---|
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. |
WorkloadIdentityCredential clientId memerlukan , tenantId dan tokenFilePath untuk mengautentikasi dengan ID Microsoft Entra. |
Jika Anda menggunakan DefaultAzureCredential , maka: - Pastikan BAHWA ID klien ditentukan melalui workloadIdentityClientId setter atau AZURE_CLIENT_ID variabel lingkungan. - Pastikan BAHWA ID penyewa ditentukan melalui AZURE_TENANT_ID variabel lingkungan. - Pastikan Anda telah menentukan jalur file token melalui AZURE_FEDERATED_TOKEN_FILE variabel lingkungan. - Pastikan bahwa host otoritas ditentukan melalui AZURE_AUTHORITY_HOST variabel lingkungan. Jika Anda menggunakan WorkloadIdentityCredential , maka: - Pastikan BAHWA ID penyewa ditentukan melalui tenantId setter pada penyusun kredensial atau AZURE_TENANT_ID variabel lingkungan. - Pastikan BAHWA ID klien ditentukan melalui clientId setter pada penyusun kredensial atau AZURE_CLIENT_ID variabel lingkungan. - Pastikan bahwa jalur file token ditentukan melalui tokenFilePath setter pada penyusun kredensial atau AZURE_FEDERATED_TOKEN_FILE variabel lingkungan. - Untuk masalah lain, lihat panduan pemecahan masalah produk. |
Langkah berikutnya
Jika panduan pemecahan masalah dalam artikel ini tidak membantu mengatasi masalah saat Anda menggunakan pustaka klien Azure SDK untuk Java, kami sarankan Anda mengajukan masalah di repositori Azure SDK for Java GitHub.