Solucionar problemas de autenticação de aplicativo hospedado no Azure

Este artigo fornece orientação sobre como lidar com problemas encontrados ao autenticar o SDK do Azure para aplicativos Java hospedados no Azure, por meio de várias TokenCredential implementações. Para obter mais informações, consulte Autenticar aplicativos Java hospedados no Azure.

Solucionar problemas de DefaultAzureCredential

Quando você usa DefaultAzureCredentialo , você pode, opcionalmente, tentar/capturar para CredentialUnavailableException. A tabela a seguir mostra os erros que essa exceção indica e os métodos de mitigação:

Error message Description Mitigação
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." Todas as credenciais na DefaultAzureCredential cadeia não conseguiram recuperar um token, cada uma lançando um CredentialUnavailableExceptionarquivo . Habilite o registro em log para verificar as credenciais que estão sendo testadas e obter mais informações de diagnóstico.

Para obter mais informações, consulte o guia de solução de problemas para um dos seguintes tipos de credenciais subjacentes:
- AmbienteCredencial
- ManagedIdentityCredential
- VisualStudioCodeCredential
- AzureCLICredential
- AzurePowershellCredential
HttpResponseException raised from the client with a status code of 401 or 403 A autenticação foi bem-sucedida, mas o serviço do Azure que autoriza respondeu com um código de status 401 (Autenticar) ou 403 (Proibido). Esse problema geralmente ocorre quando DefaultAzureCredential autentica uma conta diferente da pretendida ou a conta pretendida não tem as permissões ou funções corretas atribuídas. Habilite o registro em log para determinar qual credencial na cadeia retornou o token de autenticação.

No caso em que uma credencial diferente da esperada está retornando um token, procure ignorar esse problema saindo da ferramenta de desenvolvimento correspondente.

Verifique se a função correta está atribuída à conta que está sendo usada. Por exemplo, uma função específica do serviço em vez da função de Proprietário da assinatura.

Solucionar problemas de EnvironmentCredential

Quando você usa EnvironmentCredentialo , você pode, opcionalmente, tentar/capturar para CredentialUnavailableException. A tabela a seguir mostra os erros que essa exceção indica e os métodos de mitigação:

Error message Description Mitigação
Environment variables aren't fully configured. Não foi definida uma combinação válida de variáveis de ambiente. Certifique-se de que as variáveis de ambiente apropriadas sejam definidas antes da inicialização do aplicativo para o método de autenticação pretendido, conforme descrito na lista a seguir:
- Para autenticar uma entidade de serviço usando um segredo do cliente, certifique-se de que as variáveis AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_CLIENT_SECRET estão corretamente definidas.
- Para autenticar uma entidade de serviço usando um certificado, certifique-se de que as variáveis AZURE_CLIENT_ID, , AZURE_TENANT_IDAZURE_CLIENT_CERTIFICATE_PATHe opcionalmente AZURE_CLIENT_CERTIFICATE_PASSWORD estão definidas corretamente.
- Para autenticar um usuário usando uma senha, certifique-se de que as variáveis AZURE_USERNAME e AZURE_PASSWORD estão corretamente definidas.

Solucionar problemas de ManagedIdentityCredential

ManagedIdentityCredential foi projetado para funcionar em vários hosts do Azure que fornecem identidade gerenciada. A configuração da identidade gerenciada e a solução de problemas de falhas variam de host para host. A lista a seguir mostra os ambientes de host do Azure aos quais você pode atribuir uma identidade gerenciada e que ManagedIdentityCredential dá suporte:

Identidade Gerida da Máquina Virtual do Azure

Quando você usa ManagedIdentityCredentialo , você pode, opcionalmente, tentar/capturar para CredentialUnavailableException. A tabela a seguir mostra os erros que essa exceção indica e os métodos de mitigação:

Error message Description Mitigação
The requested identity hasn't been assigned to this resource. O ponto de extremidade do Serviço de Metadados de Instância do Azure (IMDS) respondeu com um código de status de 400, indicando que a identidade solicitada não está atribuída à máquina virtual (VM). Se você estiver usando uma identidade atribuída pelo usuário, verifique se a especificada clientId está correta.

Se estiver a utilizar uma identidade atribuída ao sistema, certifique-se de que a ativou corretamente. Para obter mais informações, consulte a seção Habilitar identidade gerenciada atribuída ao sistema em uma VM existente de Configurar identidades gerenciadas para recursos do Azure em uma VM usando o portal do Azure.
The request failed due to a gateway error. A solicitação para o ponto de extremidade IMDS falhou devido a um erro de gateway, código de status 502 ou 504. O IMDS não suporta chamadas via proxy ou gateway. Desabilitar proxies ou gateways em execução na VM para chamadas para o ponto de extremidade IMDS http://169.254.169.254/
No response received from the managed identity endpoint. Nenhuma resposta foi recebida para a solicitação ao IMDS ou a solicitação expirou. - Certifique-se de que você configurou corretamente a identidade gerenciada na VM. Para obter mais informações, consulte Configurar identidades gerenciadas para recursos do Azure em uma VM usando o portal do Azure.
- Verifique se o ponto de extremidade IMDS está acessível na VM. Para obter mais informações, consulte a próxima seção.
Multiple attempts failed to obtain a token from the managed identity endpoint. As tentativas de recuperar um token do ponto de extremidade do IMDS foram esgotadas. - Para obter mais informações sobre falhas específicas, consulte as mensagens de exceção internas. Se os dados tiverem sido truncados, mais detalhes podem ser obtidos coletando logs.
- Certifique-se de que você configurou corretamente a identidade gerenciada na VM. Para obter mais informações, consulte Configurar identidades gerenciadas para recursos do Azure em uma VM usando o portal do Azure.
- Verifique se o ponto de extremidade IMDS está acessível na VM. Para obter mais informações, consulte a próxima seção.

Verifique se o IMDS está disponível na VM

Se você tiver acesso à VM, poderá verificar se o ponto de extremidade de identidade gerenciado está disponível por meio da linha de comando usando , conforme curlmostrado no exemplo a seguir:

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

Aviso

A saída deste comando contém um token de acesso válido. Para evitar comprometer a segurança da conta, não partilhe este token de acesso.

Serviço de Aplicações do Azure e Identidade Gerida das Funções do Azure

Quando você usa ManagedIdentityCredentialo , você pode, opcionalmente, tentar/capturar para CredentialUnavailableException. A tabela a seguir mostra os erros que essa exceção indica e os métodos de mitigação:

Error message Description Mitigação
ManagedIdentityCredential authentication unavailable. As variáveis de ambiente configuradas pelo host dos Serviços de Aplicativo não estavam presentes. - Verifique se você configurou corretamente a identidade gerenciada na instância do Serviço de Aplicativo. Para obter mais informações, consulte Como usar identidades gerenciadas para o Serviço de Aplicativo e o Azure Functions.
- Verifique se você configurou corretamente o ambiente do Serviço de Aplicativo e se o ponto de extremidade de identidade gerenciado está disponível. Para obter mais informações, consulte a próxima seção.

Verifique se o ponto de extremidade de Identidade Gerenciada do Serviço de Aplicativo está disponível

Se você tiver acesso ao SSH na instância do Serviço de Aplicativo, poderá verificar se a identidade gerenciada está disponível no ambiente. Primeiro, certifique-se de ter definido as variáveis MSI_ENDPOINT de ambiente e MSI_SECRET no ambiente. Em seguida, você pode verificar se o ponto de extremidade de identidade gerenciada está disponível usando curl, conforme mostrado no exemplo a seguir:

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

Aviso

A saída deste comando contém um token de acesso válido. Para evitar comprometer a segurança da conta, não partilhe este token de acesso.

Azure Kubernetes Service Managed Identity

Identidade do pod para Kubernetes

Quando você usa ManagedIdentityCredentialo , você pode, opcionalmente, tentar/capturar para CredentialUnavailableException. A tabela a seguir mostra os erros que essa exceção indica e os métodos de mitigação:

Error message Description Mitigação
No Managed Identity endpoint found O aplicativo tentou autenticar antes que uma identidade fosse atribuída ao seu pod. Verifique se o pod está rotulado corretamente. Esse problema também ocorre quando um pod rotulado corretamente autentica antes que a identidade esteja pronta. Para evitar corridas de inicialização, configure o NMI para definir o Retry-After cabeçalho em suas respostas. Para obter mais informações, consulte set Retry-After header in NMI response na documentação do Pod Identity.

Solucionar problemas de WorkloadIdentityCredential

Quando você usa WorkloadIdentityCredentialo , você pode, opcionalmente, tentar/capturar para CredentialUnavailableException. A tabela a seguir mostra os erros que essa exceção indica e os métodos de mitigação:

Error message Description Mitigação
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. WorkloadIdentityCredential requer clientIde tenantIdtokenFilePath para autenticar com o Microsoft Entra ID. Se estiver a utilizar DefaultAzureCredentialo , então:
- Certifique-se de que o ID do cliente é especificado através do workloadIdentityClientId setter ou da AZURE_CLIENT_ID variável de ambiente.
- Certifique-se de que o ID do locatário é especificado através da AZURE_TENANT_ID variável de ambiente.
- Certifique-se de ter especificado o caminho do arquivo de token através da AZURE_FEDERATED_TOKEN_FILE variável de ambiente.
- Certifique-se de que o host da autoridade é especificado através da AZURE_AUTHORITY_HOST variável de ambiente.

Se estiver a utilizar WorkloadIdentityCredentialo , então:
- Certifique-se de que o ID do locatário é especificado através do tenantId setter no construtor de credenciais ou na AZURE_TENANT_ID variável de ambiente.
- Certifique-se de que o ID do cliente é especificado através do clientId setter no construtor de credenciais ou na AZURE_CLIENT_ID variável de ambiente.
- Certifique-se de que o caminho do arquivo de token seja especificado através do tokenFilePath setter no construtor de credenciais ou na AZURE_FEDERATED_TOKEN_FILE variável de ambiente.
- Para outros problemas, consulte o guia de solução de problemas do produto.

Próximos passos

Se as diretrizes de solução de problemas neste artigo não ajudarem a resolver problemas quando você usa o SDK do Azure para bibliotecas de cliente Java, recomendamos que você registre um problema no repositório do SDK do Azure para Java GitHub.