Autenticar aplicativos Java hospedados no Azure

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

Este artigo aborda os seguintes temas:

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

Credencial padrão do Azure

DefaultAzureCredential é apropriado para a maioria dos cenários em que o aplicativo é executado na Nuvem do Azure. DefaultAzureCredential Combina credenciais que são comumente usadas para autenticar quando implantadas, com credenciais que são 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 tiver autenticado através do Kit de Ferramentas do Azure para IntelliJ, DefaultAzureCredential autentica-se com essa conta.
  • Visual Studio Code - Se você se autenticou por meio do plug-in da Conta do Azure do Visual Studio Code, DefaultAzureCredential autentica 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 DefaultAzureCredential

DefaultAzureCredential Suporta um conjunto de configurações através de setters nas variáveis de DefaultAzureCredentialBuilder ambiente OR.

  • Definir as variáveis AZURE_CLIENT_IDde ambiente , AZURE_CLIENT_SECRETe AZURE_TENANT_ID conforme definido em Variáveis de DefaultAzureCredential ambiente configura para autenticar como a entidade de serviço especificada pelos valores.
  • A configuração .managedIdentityClientId(String) no construtor ou na variável AZURE_CLIENT_ID de ambiente configura DefaultAzureCredential para autenticar como uma identidade gerenciada definida pelo usuário, enquanto deixá-los vazios configura para autenticar como uma identidade gerenciada atribuída ao sistema.
  • A configuração .tenantId(String) no construtor ou na variável AZURE_TENANT_ID de ambiente configura DefaultAzureCredential para autenticar em um locatário específico para cache de token compartilhado, Visual Studio Code e IntelliJ IDEA.
  • A configuração da variável AZURE_USERNAME de ambiente configura DefaultAzureCredential para escolher o token 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 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 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 Kit de Ferramentas do Azure para IntelliJ com 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 obter mais informações sobre como configurar seu IntelliJ IDEA, consulte Entrar no Kit de Ferramentas do Azure para 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 (sistema ou usuário atribuído) 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 de , IMDS pontos de extremidade ou ambos, essa credencial autenticará seu aplicativo e oferecerá uma ótima experiência de IDENTITY/MSIautenticação sem segredo.

Para obter mais informações, veja O que são identidades geridas para os recursos do Azure?.

Autenticar no Azure com identidade gerenciada

O exemplo a seguir demonstra a autenticação da SecretClient biblioteca de cliente azure-security-keyvault-secrets usando o ManagedIdentityCredential ambiente em uma máquina virtual, serviço de aplicativo, aplicativo de função, Cloud Shell, malha de serviço, arco ou AKS no Azure, com identidade gerenciada atribuída pelo sistema ou 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 DefaultAzureCredential e EnvironmentCredential com variáveis de ambiente. Cada tipo de autenticação requer valores para variáveis específicas:

Principal 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 chave privada (sem proteção por senha).

Nome de utilizador e palavra-passe

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 e-mail).
AZURE_PASSWORD A senha associada para o nome de usuário fornecido.

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

Próximos passos

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

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 dominar a autenticação, consulte Configurar o log no SDK do Azure para Java para obter informações sobre a funcionalidade de registro em log fornecida pelo SDK.