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
:
- Serviço de Aplicativo do Azure e Azure Functions: configuração - solução de problemas
- Azure Arc: configuração
- Serviço de Kubernetes do Azure: configuração -
- Azure Service Fabric: configuração
- Máquinas Virtuais e Conjuntos de Dimensionamento do Azure:configuração -
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.