Biblioteca de clientes da Identidade do Azure para Java – versão 1.10.4
A biblioteca de Identidade do Azure fornece suporte à autenticação de token do Azure Active Directory (Azure AD) no SDK do Azure. Ele fornece um conjunto de implementações TokenCredential que podem ser usadas para construir clientes do SDK do Azure que dão suporte à autenticação de token Azure AD.
Código-fonte | Documentação | de referência da APIdocumentação do Azure AD
Introdução
Incluir o pacote
Incluir o arquivo da BOM
Inclua o azure-sdk-bom
em seu projeto para usar uma dependência na versão estável da biblioteca. No snippet a seguir, substitua o espaço reservado {bom_version_to_target}
pelo número de versão. Para saber mais sobre o BOM, confira o LEIAME do BOM do SDK do Azure.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Em seguida, inclua a dependência direta na dependencies
seção sem a marca de versão:
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
</dependencies>
Incluir dependência direta
Para assumir a dependência de uma versão específica da biblioteca que não está presente no BOM, adicione a dependência direta ao seu projeto da seguinte maneira:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.10.1</version>
</dependency>
Pré-requisitos
- Um Java Development Kit (JDK) versão 8 ou posterior.
- Uma assinatura do Azure.
- A CLI do Azure também pode ser útil para autenticar em um ambiente de desenvolvimento, criar contas e gerenciar funções de conta.
Autenticar o cliente
Ao depurar e executar o código localmente, é comum que um desenvolvedor use sua própria conta para autenticar chamadas aos serviços do Azure. Há várias ferramentas de desenvolvedor que podem ser usadas para executar essa autenticação em seu ambiente de desenvolvimento:
- Azure Toolkit for IntelliJ
- Visual Studio Code Extensão de Conta do Azure
- É um problema conhecido que
VisualStudioCodeCredential
não funciona com versões de extensão da Conta do Azure mais recentes do que a 0.9.11. Uma correção de longo prazo para esse problema está em andamento. Enquanto isso, considere a autenticação por meio da CLI do Azure (abaixo).
- É um problema conhecido que
- CLI do Azure
Selecione cada item acima para saber mais sobre como configurá-los para a autenticação de Identidade do Azure.
Principais conceitos
Credencial
Uma credencial é uma classe que contém ou pode obter os dados necessários para um cliente de serviço autenticar solicitações. Os clientes de serviço no SDK do Azure aceitam credenciais quando são construídos. Os clientes de serviço usam essas credenciais para autenticar solicitações para o serviço.
A biblioteca de Identidade do Azure se concentra na autenticação OAuth com Azure AD e oferece várias classes de credencial capazes de adquirir um token Azure AD para autenticar solicitações de serviço. Todas as classes de credencial nesta biblioteca são implementações da TokenCredential
classe abstrata no azure-core e qualquer uma delas pode ser usada por para construir clientes de serviço capazes de autenticar com um TokenCredential
.
Confira Classes de credencial para obter uma lista completa das classes de credencial disponíveis.
DefaultAzureCredential
O DefaultAzureCredential
é apropriado para a maioria dos cenários em que o aplicativo se destina a ser executado no Azure. Isso ocorre porque o DefaultAzureCredential
combina as credenciais normalmente usadas para autenticação quando implantada com as credenciais usadas para realizar a autenticação em um ambiente de desenvolvimento.
Observação:
DefaultAzureCredential
destina-se a simplificar a introdução ao SDK manipulando cenários comuns com comportamentos padrão razoáveis. Os desenvolvedores que desejam mais controle ou cujo cenário não é abordado nas configurações padrão devem usar outros tipos de credencial.
A DefaultAzureCredential
tentará realizar a autenticação usando os mecanismos a seguir na ordem.
- Ambiente – o
DefaultAzureCredential
lerá as informações da conta especificadas por meio de variáveis de ambiente e as usará para autenticar. - Identidade da carga de trabalho – se o aplicativo for implantado no Kubernetes com variáveis de ambiente definidas pelo webhook de identidade de carga de trabalho,
DefaultAzureCredential
autenticará a identidade configurada. - Identidade Gerenciada – se o aplicativo for implantado em um host do Azure com a Identidade Gerenciada habilitada, o
DefaultAzureCredential
será autenticado com essa conta. - Azure Developer CLI – se o desenvolvedor tiver autenticado uma conta por meio do comando Azure Developer CLI
azd auth login
, oDefaultAzureCredential
será autenticado com essa conta. - IntelliJ – se o desenvolvedor tiver se autenticado por meio do Kit de Ferramentas do Azure para IntelliJ, o
DefaultAzureCredential
será autenticado com essa conta. - CLI do Azure – se o desenvolvedor tiver autenticado uma conta por meio do comando da CLI
az login
do Azure, oDefaultAzureCredential
será autenticado com essa conta. - Azure PowerShell – se o desenvolvedor tiver autenticado uma conta por meio do comando Azure PowerShell
Connect-AzAccount
, oDefaultAzureCredential
será autenticado com essa conta.
Política de continuação
A partir da v1.10.0, DefaultAzureCredential
tentará autenticar com todas as credenciais de desenvolvedor até que uma seja bem-sucedida, independentemente de erros que as credenciais anteriores do desenvolvedor tenham sofrido. Por exemplo, uma credencial de desenvolvedor pode tentar obter um token e falhar, portanto DefaultAzureCredential
, continuará para a próxima credencial no fluxo. As credenciais de serviço implantadas interromperão o fluxo com uma exceção gerada se puderem tentar recuperar o token, mas não receberem uma.
Isso permite experimentar todas as credenciais do desenvolvedor em seu computador, ao mesmo tempo em que tem um comportamento previsível implantado.
Observação sobre VisualStudioCodeCredential
Devido a um problema conhecido, VisualStudioCodeCredential
foi removido da DefaultAzureCredential
cadeia de tokens. Quando o problema for resolvido em uma versão futura, essa alteração será revertida.
Exemplos
Você pode encontrar mais exemplos de como usar várias credenciais na página Wiki de Exemplos de Identidade do Azure.
Autenticar com DefaultAzureCredential
Este exemplo demonstra a autenticação do SecretClient
da biblioteca de clientes azure-security-keyvault-secrets usando a DefaultAzureCredential
.
/**
* The default credential first checks environment variables for configuration.
* If environment configuration is incomplete, it will try managed identity.
*/
public void createDefaultAzureCredential() {
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();
// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
.credential(defaultCredential)
.buildClient();
}
Veja mais como configurar o DefaultAzureCredential
em sua estação de trabalho ou no Azure em Configurar DefaultAzureCredential.
Autenticar uma identidade gerenciada atribuída pelo usuário com DefaultAzureCredential
Para autenticar usando a identidade gerenciada atribuída pelo usuário, verifique se as instruções de configuração para o recurso do Azure com suporte aqui foram concluídas com êxito.
O exemplo abaixo demonstra a SecretClient
autenticação da biblioteca de clientes azure-security-keyvault-secrets usando o DefaultAzureCredential
, implantado em um recurso do Azure com uma identidade gerenciada atribuída pelo usuário configurada.
Veja mais sobre como configurar uma identidade gerenciada atribuída pelo usuário para um recurso do Azure em Habilitar identidade gerenciada para recursos do Azure.
/**
* The default credential will use the user assigned managed identity with the specified client ID.
*/
public void createDefaultAzureCredentialForUserAssignedManagedIdentity() {
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_VAULT_NAME}.vault.azure.net")
.credential(defaultCredential)
.buildClient();
}
Além de configurar o por meio do managedIdentityClientId
código, ele também pode ser definido usando a AZURE_CLIENT_ID
variável de ambiente. Essas duas abordagens são equivalentes ao usar o DefaultAzureCredential
.
Autenticar um usuário no Kit de Ferramentas do Azure para IntelliJ com DefaultAzureCredential
Para autenticar usando o IntelliJ, verifique se as instruções de configuração aqui foram concluídas com êxito.
O exemplo abaixo demonstra a SecretClient
autenticação da biblioteca de clientes azure-security-keyvault-secrets usando o DefaultAzureCredential
, em uma estação de trabalho com o IntelliJ IDEA instalado e o usuário entrou com uma conta do Azure no Kit de Ferramentas do Azure para IntelliJ.
Veja mais sobre como configurar seu IntelliJ IDEA em Entrar no Kit de Ferramentas do Azure para IntelliJ para IntelliJCredential.
/**
* The default credential will use the KeePass database path to find the user account in IntelliJ on Windows.
*/
public void createDefaultAzureCredentialForIntelliJ() {
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
// KeePass configuration required only for Windows. No configuration needed for Linux / Mac
.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_VAULT_NAME}.vault.azure.net")
.credential(defaultCredential)
.buildClient();
}
Suporte à Identidade Gerenciada
A autenticação de identidade gerenciada tem suporte por meio do DefaultAzureCredential
ou diretamente ManagedIdentityCredential
para os seguintes Serviços do Azure:
- Serviço de Aplicativo do Azure e Azure Functions
- Azure Arc
- Azure Cloud Shell
- Serviço de Kubernetes do Azure
- Azure Service Fabric
- Máquinas Virtuais do Azure
- Conjuntos de dimensionamento de Máquinas Virtuais do Azure
Nota: Use azure-identity
a versão 1.7.0
ou posterior para utilizar o suporte ao cache de token para autenticação de identidade gerenciada.
Exemplos
Autenticar no Azure com a Identidade Gerenciada
Este exemplo demonstra a autenticação da SecretClient
biblioteca de clientes azure-security-keyvault-secrets usando o ManagedIdentityCredential
em uma máquina virtual, serviço de aplicativo, aplicativo de funções, cloud shell ou ambiente aks no Azure, com identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário habilitada.
Veja mais sobre como configurar seu recurso do Azure para identidade gerenciada em Habilitar identidade gerenciada para recursos do Azure
/**
* Authenticate with a User Assigned Managed identity.
*/
public void createManagedIdentityCredential() {
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
.clientId("<USER ASSIGNED MANAGED IDENTITY CLIENT ID>") // only required for user assigned
.build();
// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
.credential(managedIdentityCredential)
.buildClient();
}
/**
* Authenticate with a System Assigned Managed identity.
*/
public void createManagedIdentityCredential() {
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
.build();
// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
.credential(managedIdentityCredential)
.buildClient();
}
Definir um fluxo de autenticação personalizado com ChainedTokenCredential
Embora DefaultAzureCredential
seja geralmente a maneira mais rápida de começar a desenvolver aplicativos para o Azure, os usuários mais avançados podem personalizar as credenciais consideradas durante a autenticação. ChainedTokenCredential
permite que os usuários combinem várias instâncias de credencial para definir uma cadeia personalizada de credenciais. Este exemplo demonstra a criação de um ChainedTokenCredential
, que:
- Tente autenticar usando a identidade gerenciada.
- Volte à autenticação por meio da CLI do Azure se a identidade gerenciada não estiver disponível no ambiente atual.
// Authenticate using managed identity if it is available; otherwise use the Azure CLI to authenticate.
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder().build();
AzureCliCredential cliCredential = new AzureCliCredentialBuilder().build();
ChainedTokenCredential credential = new ChainedTokenCredentialBuilder().addLast(managedIdentityCredential).addLast(cliCredential).build();
// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
.credential(credential)
.buildClient();
Configuração de nuvem
As credenciais são padrão para autenticar no ponto de extremidade Azure AD para a Nuvem Pública do Azure. Para acessar recursos em outras nuvens, como Azure Governamental ou uma nuvem privada, configure as credenciais com o auhtorityHost
argumento . O AzureAuthorityHosts define as autoridades para nuvens conhecidas:
DefaultAzureCredential defaultAzureCredential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_GOVERNMENT)
.build();
Nem todas as credenciais exigem essa configuração. As credenciais que se autenticam por meio de uma ferramenta de desenvolvimento, como AzureCliCredential
, usam a configuração dessa ferramenta. Da mesma forma, aceita um authority
argumento, VisualStudioCodeCredential
mas usa como padrão a autoridade que corresponde à configuração "Azure: Nuvem" do VS Code.
Classes de credencial
Autenticar aplicativos hospedados no Azure
Classe de credencial | Uso | Exemplo |
---|---|---|
DefaultAzureCredential |
fornece uma experiência de autenticação simplificada para iniciar rapidamente o desenvolvimento de aplicativos executados no Azure | Exemplo |
ChainedTokenCredential |
permite que os usuários definam fluxos de autenticação personalizados compondo várias credenciais | Exemplo |
EnvironmentCredential |
autentica uma entidade de serviço ou um usuário por meio de informações de credencial especificadas em variáveis de ambiente | |
ManagedIdentityCredential |
autentica a identidade gerenciada de um recurso do Azure | Exemplo |
WorkloadIdentityCredential |
dá suporte Azure AD identidade de carga de trabalho no Kubernetes | Exemplo |
Autenticar entidades de serviço
Classe de credencial | Uso | Exemplo | Referência |
---|---|---|---|
ClientAssertionCredential |
autentica uma entidade de serviço usando uma declaração de cliente assinada | ||
ClientCertificateCredential |
autentica uma entidade de serviço usando um certificado | Exemplo | Autenticação de entidade de serviço |
ClientSecretCredential |
autentica uma entidade de serviço usando um segredo | Exemplo | Autenticação de entidade de serviço |
Autenticar usuários
Classe de credencial | Uso | Exemplo | Referência |
---|---|---|---|
AuthorizationCodeCredential |
autenticar um usuário com um código de autorização obtido anteriormente como parte de um fluxo Oauth 2 | Código de autenticação do OAuth2 | |
DeviceCodeCredential |
autentica interativamente um usuário em dispositivos com interface do usuário limitada | Exemplo | Autenticação de código de dispositivo |
InteractiveBrowserCredential |
autentica interativamente um usuário com o navegador do sistema padrão | Exemplo | Código de autenticação do OAuth2 |
OnBehalfOfCredential |
propaga a identidade do usuário delegado e as permissões por meio da cadeia de solicitações | Autenticação em nome de | |
UsernamePasswordCredential |
autentica um usuário com um nome de usuário e senha sem autenticação multifator | Exemplo | Autenticação de nome de usuário e senha |
Autenticar por meio de ferramentas de desenvolvimento
Classe de credencial | Uso | Exemplo | Referência |
---|---|---|---|
AzureCliCredential |
Autenticar em um ambiente de desenvolvimento com o usuário ou entidade de serviço habilitado na CLI do Azure | Exemplo | Autenticação com a CLI do Azure |
AzureDeveloperCliCredential |
Autenticar em um ambiente de desenvolvimento com o usuário ou entidade de serviço habilitado no Azure Developer CLI | Referência de Azure Developer CLI | |
AzurePowerShellCredential |
Autenticar em um ambiente de desenvolvimento com o usuário ou entidade de serviço habilitado no Azure PowerShell | Exemplo | Documentação do Azure PowerShell |
IntelliJCredential |
Autenticar em um ambiente de desenvolvimento com a conta no Kit de Ferramentas do Azure para IntelliJ | Exemplo | Autenticação IntelliJ |
VisualStudioCodeCredential |
Autentique-se em um ambiente de desenvolvimento com a conta em Visual Studio Code extensão de Conta do Azure. | Exemplo | Extensão da conta do Azure do VS Code |
Nota: Todas as implementações de credencial na biblioteca de identidade do Azure são threadsafe e uma única instância de credencial pode ser usada para criar vários clientes de serviço.
As credenciais podem ser encadeadas juntas para serem testadas, por sua vez, até que uma seja bem-sucedida usando o ChainedTokenCredential
; consulte encadear credenciais para obter detalhes.
Variáveis de ambiente
DefaultAzureCredential
e EnvironmentCredential
podem ser configurados 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 do Azure AD |
AZURE_TENANT_ID |
ID do locatário do Azure AD 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 do Azure AD |
AZURE_TENANT_ID |
ID do locatário do Azure AD do aplicativo |
AZURE_CLIENT_CERTIFICATE_PATH |
caminho para um arquivo de certificado codificado em PEM ou PFX, incluindo chave privada |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(opcional) senha para certificado. O certificado não pode ser protegido por senha, a menos que esse valor seja especificado. |
Nome de usuário e senha
Nome da variável | Valor |
---|---|
AZURE_CLIENT_ID |
ID de um aplicativo do Azure AD |
AZURE_TENANT_ID |
(opcional) ID do locatário Azure AD do aplicativo |
AZURE_USERNAME |
um nome de usuário (geralmente um endereço de email) |
AZURE_PASSWORD |
a senha desse usuário |
A configuração é tentada na ordem acima. Por exemplo, se os valores para um segredo do cliente e um certificado estiverem presentes, o segredo do cliente será usado.
Avaliação contínua de acesso
A partir da v1.10.0, o acesso aos recursos protegidos pela CAE ( Avaliação Contínua de Acesso ) é possível por solicitação. Isso pode ser habilitado usando a TokenRequestContext.setCaeEnabled(boolean)
API. Não há suporte para CAE para credenciais de desenvolvedor.
Armazenamento de token em cache
O cache de token é um recurso fornecido pela biblioteca de identidade do Azure que permite que os aplicativos:
- Tokens de cache na memória (padrão) ou no disco (aceitação).
- Melhorar a resiliência e o desempenho.
- Reduza o número de solicitações feitas a Azure AD para obter tokens de acesso.
A biblioteca de Identidade do Azure oferece cache de disco persistente e na memória. Para obter mais detalhes, consulte a documentação de cache de token.
Solução de problemas
As credenciais geram exceções quando falham na autenticação ou não podem executar a autenticação. Quando as credenciais falham ao autenticar, oClientAuthenticationException
é gerado. A exceção tem um message
atributo , que descreve por que a autenticação falhou. Quando essa exceção é gerada pelo ChainedTokenCredential
, a execução encadeada da lista subjacente de credenciais é interrompida.
Quando as credenciais não podem executar a autenticação devido a um dos recursos subjacentes exigidos pela credencial que está indisponível no computador, oCredentialUnavailableException
é gerado. A exceção tem um message
atributo que descreve por que a credencial não está disponível para execução de autenticação. Quando essa exceção é gerada por ChainedTokenCredential
, a mensagem coleta mensagens de erro de cada credencial na cadeia.
Consulte o guia de solução de problemas para obter detalhes sobre como diagnosticar vários cenários de falha.
Próximas etapas
As bibliotecas de clientes Java listadas aqui dão suporte à autenticação com TokenCredential
e à biblioteca de identidade do Azure. Você pode saber mais sobre seu uso e encontrar documentação adicional sobre o uso dessas bibliotecas de clientes junto com exemplos pode ser encontrada nos links mencionados aqui.
O microsoft-graph-sdk também dá suporte à autenticação com TokenCredential
e à biblioteca de identidade do Azure.
Contribuição
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.
Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas Frequentes Sobre o Código de Conduta ou entre em contato pelo email opencode@microsoft.com para enviar outras perguntas ou comentários.