Compartilhar via


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

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

Solucionar problemas de DefaultAzureCredential

Ao usar DefaultAzureCredential, 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:

Mensagem de erro Descrição Mitigação
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." Todas as credenciais na cadeia DefaultAzureCredential falharam ao recuperar um token, cada uma lançando um CredentialUnavailableException. 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:
- EnvironmentCredential
- 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 autorizou 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 contornar esse problema saindo da ferramenta de desenvolvimento correspondente.

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

Solucionar problemas de EnvironmentCredential

Ao usar EnvironmentCredential, 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:

Mensagem de erro Descrição Mitigação
Environment variables aren't fully configured. Uma combinação válida de variáveis de ambiente não foi definida. 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 seguinte lista:
- Para autenticar uma entidade de serviço usando um segredo do cliente, verifique se as variáveis AZURE_CLIENT_ID, AZURE_TENANT_ID e AZURE_CLIENT_SECRET estão definidas corretamente.
- Para autenticar uma entidade de serviço usando um certificado, verifique se as variáveis AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_CERTIFICATE_PATH e opcionalmente AZURE_CLIENT_CERTIFICATE_PASSWORD , estão definidas corretamente.
- Para autenticar um usuário usando uma senha, verifique se as variáveis AZURE_USERNAME e AZURE_PASSWORD estão definidas corretamente.

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 dão suporte ManagedIdentityCredential:

Identidade Gerenciada de Máquina Virtual do Azure

Ao usar ManagedIdentityCredential, 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:

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

Se você estiver usando uma identidade atribuída pelo sistema, certifique-se de tê-la habilitado corretamente. Para obter mais informações, consulte a seção Habilitar identidade gerenciada atribuída pelo 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 do IMDS falhou, devido a um erro de gateway, código de status 502 ou 504. O IMDS não oferece suporte a chamadas via proxy ou gateway. Desabilitar proxies ou gateways em execução na VM para chamadas para o ponto de extremidade do 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. - Verifique se você configurou corretamente a identidade gerenciada na VM. Para obter mais informações, confira Configurar identidades gerenciadas para recursos do Azure em uma VM usando o portal do Azure.
- Verifique se o ponto de extremidade do IMDS pode ser acessado 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 novas 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 poderão ser obtidos ao coletar logs.
- Verifique se você configurou corretamente a identidade gerenciada na VM. Para obter mais informações, confira Configurar identidades gerenciadas para recursos do Azure em uma VM usando o portal do Azure.
- Verifique se o ponto de extremidade do IMDS pode ser acessado 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 curl, conforme mostrado no seguinte exemplo:

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 desse comando contém um token de acesso válido. Para evitar comprometer a segurança da conta, não compartilhe esse token de acesso.

Identidades Gerenciadas no Serviço de Aplicativo do Azure e o Azure Functions

Ao usar ManagedIdentityCredential, 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:

Mensagem de erro Descrição Mitigação
ManagedIdentityCredential authentication unavailable. As variáveis de ambiente configuradas pelo host dos Serviços de Aplicativos 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 gerenciada está disponível. Para obter mais informações, consulte a próxima seção.

Verificar se o ponto de extremidade da 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 de ambiente MSI_ENDPOINT 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 seguinte exemplo:

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 desse comando contém um token de acesso válido. Para evitar comprometer a segurança da conta, não compartilhe esse token de acesso.

Identidade gerenciada do serviço de Kubernetes do Azure

Identidade do Pod para Kubernetes

Ao usar ManagedIdentityCredential, 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:

Mensagem de erro Descrição Mitigação
No Managed Identity endpoint found O aplicativo tentou se 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 é autenticado antes que a identidade esteja pronta. Para evitar corridas de inicialização, configure o NMI para definir o cabeçalho Retry-After em suas respostas. Para obter mais informações, consulte Definir cabeçalho tentar novamente na resposta NMI na documentação da Identidade do Pod.

Solucionar problemas de WorkloadIdentityCredential

Ao usar WorkloadIdentityCredential, 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:

Mensagem de erro Descrição Mitigação
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. WorkloadIdentityCredential requer clientId, tenantId e tokenFilePath para autenticar com o Microsoft Entra ID. Se você estiver usando DefaultAzureCredential, em seguida:
- Certifique-se de que o ID do cliente seja especificado por meio do setter workloadIdentityClientId ou da variável de ambiente AZURE_CLIENT_ID.
- Certifique-se de que a ID do locatário seja especificada por meio da variável de ambiente AZURE_TENANT_ID.
- Certifique-se de ter especificado o caminho do arquivo de token por meio da variável de ambiente AZURE_FEDERATED_TOKEN_FILE.
- Certifique-se de que o host de autoridade seja especificado por meio da variável de ambiente AZURE_AUTHORITY_HOST.

Se você estiver usando WorkloadIdentityCredential, em seguida:
- Certifique-se de que a ID do locatário seja especificada por meio do setter tenantId no construtor de credenciais ou na variável de ambiente AZURE_TENANT_ID.
- Certifique-se de que a ID do cliente seja especificada por meio do setter clientId no criador de credenciais ou na variável de ambiente AZURE_CLIENT_ID.
- Certifique-se de que o caminho do arquivo de token seja especificado por meio do setter tokenFilePath no construtor de credenciais ou na variável de ambiente AZURE_FEDERATED_TOKEN_FILE.
- Para outros problemas, consulte o guia de solução de problemas do produto.

Próximas etapas

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