Risolvere i problemi di autenticazione dell'applicazione ospitata in Azure

Questo articolo fornisce indicazioni sulla gestione dei problemi riscontrati durante l'autenticazione di applicazioni Azure SDK per Java ospitate in Azure, tramite varie TokenCredential implementazioni. Per altre informazioni, vedere Autenticare le applicazioni Java ospitate in Azure.

Risolvere i problemi di DefaultAzureCredential

Quando si usa DefaultAzureCredential, è possibile provare/catch facoltativamente per CredentialUnavailableException. La tabella seguente illustra gli errori che questa eccezione indica e i metodi di mitigazione:

Error message Descrizione Strategia di riduzione del rischio
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." Tutte le credenziali nella DefaultAzureCredential catena non sono riuscite a recuperare un token, ognuna delle quali genera .CredentialUnavailableException Abilitare la registrazione per verificare le credenziali da provare e ottenere ulteriori informazioni di diagnostica.

Per altre informazioni, vedere la guida alla risoluzione dei problemi per uno dei tipi di credenziali sottostanti seguenti:
- EnvironmentCredential
- ManagedIdentityCredential
- VisualStudioCodeCredential
- AzureCLICredential
- AzurePowershellCredential
HttpResponseException raised from the client with a status code of 401 or 403 L'autenticazione ha avuto esito positivo, ma il servizio di Azure ha risposto con un codice di stato 401 (autenticazione) o 403 (accesso negato). Questo problema si verifica spesso quando DefaultAzureCredential autentica un account diverso da quello previsto o l'account previsto non dispone delle autorizzazioni o dei ruoli corretti assegnati. Abilitare la registrazione per determinare quali credenziali nella catena hanno restituito il token di autenticazione.

Nel caso in cui una credenziale diversa da quella prevista restituisca un token, cercare di ignorare questo problema disconnettendosi dallo strumento di sviluppo corrispondente.

Assicurarsi che il ruolo corretto sia assegnato all'account in uso. Ad esempio, un ruolo specifico del servizio anziché il ruolo proprietario della sottoscrizione.

Risolvere i problemi relativi a EnvironmentCredential

Quando si usa EnvironmentCredential, è possibile provare/catch facoltativamente per CredentialUnavailableException. La tabella seguente illustra gli errori che questa eccezione indica e i metodi di mitigazione:

Error message Descrizione Strategia di riduzione del rischio
Environment variables aren't fully configured. Non è stata impostata una combinazione valida di variabili di ambiente. Assicurarsi che le variabili di ambiente appropriate siano impostate prima dell'avvio dell'applicazione per il metodo di autenticazione previsto, come descritto nell'elenco seguente:
- Per autenticare un'entità servizio usando un segreto client, assicurarsi che le variabili AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_CLIENT_SECRET siano impostate correttamente.
- Per autenticare un'entità servizio usando un certificato, assicurarsi che le variabili AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_CERTIFICATE_PATHe facoltativamente siano impostate AZURE_CLIENT_CERTIFICATE_PASSWORD correttamente.
- Per autenticare un utente usando una password, assicurarsi che le variabili AZURE_USERNAME e AZURE_PASSWORD siano impostate correttamente.

Risolvere i problemi relativi a ManagedIdentityCredential

ManagedIdentityCredential è progettato per lavorare su vari host di Azure che forniscono un'identità gestita. La configurazione dell'identità gestita e la risoluzione degli errori variano da host a host. L'elenco seguente mostra gli ambienti host di Azure che è possibile assegnare un'identità gestita e che ManagedIdentityCredential supporta:

Identità gestita della macchina virtuale di Azure

Quando si usa ManagedIdentityCredential, è possibile provare/catch facoltativamente per CredentialUnavailableException. La tabella seguente illustra gli errori che questa eccezione indica e i metodi di mitigazione:

Error message Descrizione Strategia di riduzione del rischio
The requested identity hasn't been assigned to this resource. L'endpoint IMDS (Azure Instance Metadata Service) ha risposto con un codice di stato 400, che indica che l'identità richiesta non è assegnata alla macchina virtuale (VM). Se si usa un'identità assegnata dall'utente, assicurarsi che l'oggetto specificato clientId sia corretto.

Se si usa un'identità assegnata dal sistema, assicurarsi di averla abilitata correttamente. Per altre informazioni, vedere la sezione Abilitare l'identità gestita assegnata dal sistema in una macchina virtuale esistente di Configurare le identità gestite per le risorse di Azure in una macchina virtuale usando il portale di Azure.
The request failed due to a gateway error. La richiesta all'endpoint IMDS non è riuscita a causa di un errore del gateway, di codice di stato 502 o 504. IMDS non supporta le chiamate tramite proxy o gateway. Disabilitare proxy o gateway in esecuzione nella macchina virtuale per le chiamate all'endpoint IMDS http://169.254.169.254/
No response received from the managed identity endpoint. Non è stata ricevuta alcuna risposta per la richiesta a IMDS o il timeout della richiesta. - Assicurarsi di aver configurato correttamente l'identità gestita nella macchina virtuale. Per altre informazioni, vedere Configurare le identità gestite per le risorse di Azure in una macchina virtuale usando il portale di Azure.
- Verificare che l'endpoint IMDS sia raggiungibile nella macchina virtuale. Per altre informazioni, vedere la sezione successiva.
Multiple attempts failed to obtain a token from the managed identity endpoint. I tentativi per recuperare un token dall'endpoint IMDS sono stati esauriti. - Per altre informazioni sugli errori specifici, vedere i messaggi di eccezione interna. Se i dati sono stati troncati, è possibile ottenere altri dettagli raccogliendo i log.
- Assicurarsi di aver configurato correttamente l'identità gestita nella macchina virtuale. Per altre informazioni, vedere Configurare le identità gestite per le risorse di Azure in una macchina virtuale usando il portale di Azure.
- Verificare che l'endpoint IMDS sia raggiungibile nella macchina virtuale. Per altre informazioni, vedere la sezione successiva.

Verificare che IMDS sia disponibile nella macchina virtuale

Se si ha accesso alla macchina virtuale, è possibile verificare che l'endpoint dell'identità manged sia disponibile tramite la riga di comando usando curl, come illustrato nell'esempio seguente:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"

Avviso

L'output di questo comando contiene un token di accesso valido. Per evitare di compromettere la sicurezza degli account, non condividere questo token di accesso.

Identità gestita in Servizio app di Azure e Funzioni di Azure

Quando si usa ManagedIdentityCredential, è possibile provare/catch facoltativamente per CredentialUnavailableException. La tabella seguente illustra gli errori che questa eccezione indica e i metodi di mitigazione:

Error message Descrizione Strategia di riduzione del rischio
ManagedIdentityCredential authentication unavailable. Le variabili di ambiente configurate dall'host servizio app non erano presenti. - Assicurarsi di aver configurato correttamente l'identità gestita nell'istanza di servizio app. Per altre informazioni, vedere Come usare le identità gestite nel servizio app e in Funzioni di Azure.
- Verificare di aver configurato correttamente l'ambiente servizio app e che l'endpoint dell'identità gestita sia disponibile. Per altre informazioni, vedere la sezione successiva.

Verificare che l'endpoint dell'identità gestita servizio app sia disponibile

Se si ha accesso a SSH nell'istanza di servizio app, è possibile verificare che l'identità gestita sia disponibile nell'ambiente. Prima di tutto, assicurarsi di aver impostato le variabili MSI_ENDPOINT di ambiente e MSI_SECRET nell'ambiente. È quindi possibile verificare che l'endpoint dell'identità gestita sia disponibile usando curl, come illustrato nell'esempio seguente:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"

Avviso

L'output di questo comando contiene un token di accesso valido. Per evitare di compromettere la sicurezza degli account, non condividere questo token di accesso.

identità gestita servizio Azure Kubernetes

Identità pod per Kubernetes

Quando si usa ManagedIdentityCredential, è possibile provare/catch facoltativamente per CredentialUnavailableException. La tabella seguente illustra gli errori che questa eccezione indica e i metodi di mitigazione:

Error message Descrizione Strategia di riduzione del rischio
No Managed Identity endpoint found L'applicazione ha tentato di eseguire l'autenticazione prima dell'assegnazione di un'identità al relativo pod. Verificare che il pod sia etichettato correttamente. Questo problema si verifica anche quando un pod con etichetta corretta esegue l'autenticazione prima che l'identità sia pronta. Per evitare races di inizializzazione, configurare NMI per impostare l'intestazione Retry-After nelle relative risposte. Per altre informazioni, vedere Impostare l'intestazione Retry-After nella risposta NMI nella documentazione relativa all'identità dei pod.

Risolvere i problemi relativi a WorkloadIdentityCredential

Quando si usa WorkloadIdentityCredential, è possibile provare/catch facoltativamente per CredentialUnavailableException. La tabella seguente illustra gli errori che questa eccezione indica e i metodi di mitigazione:

Error message Descrizione Strategia di riduzione del rischio
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. WorkloadIdentityCredential richiede clientIde tenantId tokenFilePath per eseguire l'autenticazione con Microsoft Entra ID. Se si usa DefaultAzureCredential, allora:
- Assicurarsi che l'ID client sia specificato tramite il workloadIdentityClientId setter o la AZURE_CLIENT_ID variabile di ambiente.
- Assicurarsi che l'ID tenant sia specificato tramite la AZURE_TENANT_ID variabile di ambiente.
- Assicurarsi di aver specificato il percorso del file del token tramite la AZURE_FEDERATED_TOKEN_FILE variabile di ambiente.
- Assicurarsi che l'host dell'autorità sia specificato tramite la AZURE_AUTHORITY_HOST variabile di ambiente.

Se si usa WorkloadIdentityCredential, allora:
- Assicurarsi che l'ID tenant sia specificato tramite il tenantId setter nel generatore di credenziali o nella AZURE_TENANT_ID variabile di ambiente.
- Assicurarsi che l'ID client sia specificato tramite il clientId setter nel generatore di credenziali o nella AZURE_CLIENT_ID variabile di ambiente.
- Assicurarsi che il percorso del file del token sia specificato tramite il tokenFilePath setter nel generatore di credenziali o nella AZURE_FEDERATED_TOKEN_FILE variabile di ambiente.
- Per altri problemi, vedere la guida alla risoluzione dei problemi del prodotto.

Passaggi successivi

Se le linee guida per la risoluzione dei problemi in questo articolo non consentono di risolvere i problemi quando si usano le librerie client di Azure SDK per Java, è consigliabile segnalare un problema nel repository GitHub di Azure SDK per Java.