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_ID e 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_PATH e 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:
- app Azure Servizio e Funzioni di Azure - Risoluzione dei problemi di configurazione -
- Azure Arc - Configurazione
- servizio Azure Kubernetes - Risoluzione dei problemi di configurazione -
- Azure Service Fabric - configurazione
- Risoluzione dei problemi di configurazione di Azure Macchine virtuali e set di scalabilità -
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 clientId e 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.