Autenticar aplicativos Java hospedados no Azure

Este artigo examina como a biblioteca de Identidades do Azure dá suporte à autenticação de token do Microsoft Entra para aplicativos hospedados no Azure. Esse suporte é possível por meio de um conjunto de implementações, que são discutidas TokenCredential neste artigo.

Este artigo aborda 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 é apropriado para a maioria dos cenários em que o aplicativo é executado 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 através dos seguintes mecanismos em ordem:

DefaultAzureCredential authentication flow

  • Ambiente - DefaultAzureCredential lê as informações da conta especificadas por meio de variáveis de ambiente e as usa para autenticar.
  • Identidade Gerenciada - Se o aplicativo for implantado em um host do Azure com a Identidade Gerenciada habilitada, DefaultAzureCredential autenticará com essa conta.
  • IntelliJ - Se você tiver se autenticado por meio do Kit de Ferramentas do Azure para IntelliJ, DefaultAzureCredential autenticará com essa conta.
  • Visual Studio Code - Se você tiver autenticado por meio do plug-in da Conta do Azure do Visual Studio Code, DefaultAzureCredential autenticará com essa conta.
  • CLI do Azure - Se você autenticou uma conta por meio do comando da CLI az login 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.

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

Autenticar com DefaultAzureCredential

O exemplo a seguir demonstra a autenticação da SecretClient biblioteca de cliente azure-security-keyvault-secrets usando DefaultAzureCredentialo .

// 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 da SecretClient 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 da SecretClient biblioteca de cliente azure-security-keyvault-secrets usando DefaultAzureCredentialo , em uma estação de trabalho onde o IntelliJ IDEA está instalado e o usuário entrou com uma conta do Azure no Kit de Ferramentas do Azure para 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 ofereça suporte à Identidade Gerenciada por meio IDENTITY/MSIde , pontos de IMDS extremidade ou ambos, essa credencial autenticará seu aplicativo e oferecerá uma ótima 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 aplicativo hospedado 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.