Compartilhar via


Autenticar aplicativos Java hospedados no Azure

Este artigo analisa como a biblioteca de Identidade do Azure oferece suporte à autenticação de token do Microsoft Entra para aplicativos hospedados no Azure. Esse suporte é possibilitado por um conjunto de implementações de TokenCredential, que são discutidas nesse artigo.

Este artigo abrange os seguintes assuntos:

Para solucionar problemas de autenticação relacionados a aplicativos hospedados no Azure, consulte Solucionar problemas de autenticação de aplicativo hospedado no Azure.

Credencial do Azure padrão

DefaultAzureCredential é apropriada para a maioria dos cenários em que o aplicativo é executado, em última instância, na nuvem do Azure. A DefaultAzureCredential combina as credenciais comumente usadas para autenticação quando implantadas com credenciais usadas para autenticar em um ambiente de desenvolvimento. DefaultAzureCredential tenta autenticar por meio dos seguintes mecanismos, nesta ordem:

Fluxo de autenticação DefaultAzureCredential

  • Ambiente: DefaultAzureCredential lê as informações da conta especificadas por meio das variáveis de ambiente e a usa para autenticar.
  • Identidade gerenciada: se o aplicativo for implantado em um host do Azure com identidade gerenciada habilitada, DefaultAzureCredential autentica com essa conta.
  • IntelliJ: se você tiver autenticado usando o Azure Toolkit for IntelliJ, DefaultAzureCredential autentica com essa conta.
  • Visual Studio Code: se você tiver autenticado usando o plug-in de conta do Azure do Visual Studio Code, DefaultAzureCredential autentica com essa conta.
  • CLI do Azure: se você tiver autenticado uma conta por meio do comando az login da CLI do Azure, DefaultAzureCredential autentica com essa conta.

Configurar a DefaultAzureCredential

A DefaultAzureCredential dá suporte a um conjunto de configurações por meio de setters no DefaultAzureCredentialBuilder ou nas variáveis de ambiente.

  • Definir as variáveis de ambiente AZURE_CLIENT_ID, AZURE_CLIENT_SECRET e AZURE_TENANT_ID conforme definido em variáveis de ambiente configura DefaultAzureCredential para autenticação como a entidade de serviço especificada pelos valores.
  • Configurar .managedIdentityClientId(String) no criador ou na variável de ambiente AZURE_CLIENT_ID configura DefaultAzureCredential para autenticação como uma identidade gerenciada definida pelo usuário, enquanto deixá-la vazia a configura para ser autenticada como uma identidade gerenciada atribuída pelo sistema.
  • A configuração de .tenantId(String) no construtor ou na variável de ambiente AZURE_TENANT_ID configura DefaultAzureCredential para autenticação em um locatário específico para o cache de token compartilhado, Visual Studio Code e a IntelliJ IDEA.
  • A configuração da variável de ambiente AZURE_USERNAME configura DefaultAzureCredential para escolher o token armazenado em cache correspondente do cache de token compartilhado.
  • A configuração de .intelliJKeePassDatabasePath(String) no construtor configura DefaultAzureCredential para ler um arquivo KeePass específico ao realizar a autenticação com as credenciais do IntelliJ.

Autenticar com DefaultAzureCredential

O exemplo a seguir demonstra como autenticar SecretClient da biblioteca de cliente azure-security-keyvault-secrets usando DefaultAzureCredential.

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(new DefaultAzureCredentialBuilder().build())
  .buildClient();

Autenticar uma identidade gerenciada atribuída ao usuário com a DefaultAzureCredential

O exemplo a seguir demonstra a autenticação de SecretClient da biblioteca de cliente azure-security-keyvault-secrets usando DefaultAzureCredential implantado em um recurso do Azure com uma identidade gerenciada atribuída pelo usuário configurada.

/**
 * The default credential uses the user-assigned managed identity with the specified client ID.
 */
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .managedIdentityClientId("<managed identity client ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Autenticar um usuário no Azure Toolkit for IntelliJ com a DefaultAzureCredential

O exemplo a seguir demonstra a autenticação de SecretClient da biblioteca de clientes azure-security-keyvault-secrets usando DefaultAzureCredential em uma estação de trabalho em que o IDEA do IntelliJ está instalado e o usuário entrou com uma conta do Azure para o Azure Toolkit for IntelliJ.

Para saber mais sobre como configurar seu IntelliJ IDEA, confira Entrar no Azure Toolkit for IntelliJ para IntelliJCredential.

/**
 * The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
 */
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Credencial de identidade gerenciada

A Identidade Gerenciada autentica a identidade gerenciada (atribuída pelo sistema ou pelo usuário) de um recurso do Azure. Portanto, se o aplicativo estiver sendo executado dentro de um recurso do Azure que dá suporte à Identidade Gerenciada por meio de pontos de extremidade IDENTITY/MSI, IMDS ou ambos, então essa credencial faz com que seu aplicativo seja autenticado e oferece uma excelente experiência de autenticação sem segredo.

Para obter mais informações, consulte O que são identidades gerenciadas para recursos do Azure?

Autenticar no Azure com identidade gerenciada

O exemplo a seguir demonstra a autenticação do SecretClient da biblioteca de clientes azure-security-keyvault-secrets usando a ManagedIdentityCredential em uma máquina virtual, serviço de aplicativo, aplicativo de funções, Cloud Shell, Service Fabric, ARC ou ambiente AKS no Azure, com a identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário habilitada.

/**
 * Authenticate with a managed identity.
 */
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
  .clientId("<user-assigned managed identity client ID>") // required only for user-assigned
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(managedIdentityCredential)
  .buildClient();

Variáveis de ambiente

Você pode configurar a DefaultAzureCredential e a EnvironmentCredential com variáveis de ambiente. Cada tipo de autenticação requer valores para variáveis específicas:

Entidade de serviço com segredo

Nome da variável Valor
AZURE_CLIENT_ID ID de um aplicativo Microsoft Entra.
AZURE_TENANT_ID ID do locatário do Microsoft Entra do aplicativo.
AZURE_CLIENT_SECRET Um dos segredos do cliente do aplicativo.

Entidade de serviço com certificado

Nome da variável Valor
AZURE_CLIENT_ID ID de um aplicativo Microsoft Entra.
AZURE_TENANT_ID ID do locatário do Microsoft Entra do aplicativo.
AZURE_CLIENT_CERTIFICATE_PATH Caminho para um arquivo de certificado codificado em PEM, incluindo a chave privada (sem proteção de senha).

Nome de usuário e senha

Nome da variável Valor
AZURE_CLIENT_ID ID de um aplicativo Microsoft Entra.
AZURE_USERNAME Um nome de usuário (geralmente um endereço de email).
AZURE_PASSWORD A senha associada para o nome de usuário fornecido.

A configuração é tentada nesta ordem. Por exemplo, se os valores para um segredo do cliente e um certificado estiverem presentes, o segredo do cliente será usado.

Próximas etapas

Este artigo abordou a autenticação para aplicativos hospedados no Azure. Essa forma de autenticação é uma das várias maneiras de autenticar-se no SDK do Azure para Java. Os seguintes artigos descrevem outras maneiras de realizar a:

Se você tiver problemas relacionados à autenticação de aplicativos hospedados no Azure, consulte Solucionar problemas de autenticação de aplicativo hospedado no Azure.

Depois de ter feito a autenticação mestra, confira Configurar o registro em log no SDK do Azure para Java para obter informações sobre a funcionalidade de registro em log fornecida pelo SDK.