Início rápido: Adquirir um token e chamar a API do Microsoft Graph em um aplicativo de console Java usando a identidade do aplicativo
Seja bem-vindo! Essa provavelmente não é a página que você esperava. Enquanto trabalhamos em uma correção, este link direcionará você para o artigo certo:
Início Rápido: Adquirir um token e chamar o Microsoft Graph de um aplicativo daemon Java
Pedimos desculpas pela inconveniência e agradecemos sua paciência enquanto trabalhamos para resolver isso.
Neste guia de início rápido, você baixará e executará um exemplo de código que demonstra como um aplicativo Java pode obter um token de acesso usando a identidade do aplicativo para chamar a API do Microsoft Graph e exibir uma lista de usuários no diretório. O exemplo de código demonstra como um trabalho autônomo ou um serviço Windows pode ser executado com uma identidade de aplicativo, em vez de uma identidade do usuário.
Pré-requisitos
Para executar este exemplo, você precisa de:
- JDK (Java Development Kit) 8 ou posterior
- Maven
Baixar e configurar o aplicativo de início rápido
Etapa 1: Configurar o aplicativo no portal do Azure
Para o exemplo de código deste início rápido funcionar, você precisará criar um segredo do cliente e adicionar a permissão de aplicativo User.Read.All da API do Graph.
Esses atributos já estão configurados no seu aplicativo.
Etapa 2: Baixar o projeto Java
Observação
Enter_the_Supported_Account_Info_Here
Etapa 3: Consentimento do administrador
Se você tentar executar o aplicativo neste ponto, receberá o erro HTTP 403 – Proibido: Insufficient privileges to complete the operation
. Esse erro ocorre porque qualquer permissão somente de aplicativo requer consentimento do administrador: um administrador de aplicativos em nuvem do seu diretório deve dar consentimento ao seu aplicativo. Selecione uma das opções abaixo, dependendo de sua função:
Administrador de Aplicativos de Nuvem
Se você for um administrador de aplicativos em nuvem do seu locatário, vá para a página Permissões de API e selecione Conceder consentimento do administrador para Enter_the_Tenant_Name_Here.
Usuário padrão
Se você for um usuário padrão do seu locatário, precisará solicitar a um administrador de aplicativos em nuvem que conceda consentimento administrativo para seu aplicativo. Para fazer isso, dê a seguinte URL ao administrador:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
Etapa 4: Executar o aplicativo
Teste o exemplo diretamente executando o método principal de ClientCredentialGrant.java no IDE.
No shell ou na linha de comando:
$ mvn clean compile assembly:single
Isso vai gerar um arquivo msal-client-credential-secret-1.0.0.jar no diretório /targets. Execute-o usando o executável Java, conforme mostrado abaixo:
$ java -jar msal-client-credential-secret-1.0.0.jar
Após a execução, o aplicativo exibirá a lista de usuários no locatário configurado.
Importante
Este aplicativo de início rápido usa um segredo do cliente para se identificar como cliente confidencial. Como o segredo do cliente é adicionado como texto sem formatação a seus arquivos de projeto, por motivos de segurança, é recomendável que você use um certificado, em vez de um segredo do cliente, antes de considerar o aplicativo como aplicativo de produção. Para obter mais informações sobre como usar um certificado, confira estas instruções no mesmo repositório GitHub deste exemplo, mas na segunda pasta msal-client-credential-certificate.
Mais informações
MSAL Java
MSAL Java é a biblioteca usada para conectar usuários e solicitar tokens usados para acessar uma API protegida pela plataforma de identidade da Microsoft. Conforme descrito, este início rápido solicita tokens usando a identidade do próprio aplicativo, em vez de permissões delegadas. O fluxo de autenticação usado nesse caso é conhecido como fluxo OAuth de credenciais do cliente . Para obter mais informações sobre como usar a MSAL Java com aplicativos daemon, confira este artigo.
Adicione a MSAL4J ao seu aplicativo usando o Maven ou o Gradle para gerenciar as dependências fazendo as alterações a seguir no arquivo pom.xml (Maven) ou build.gradle (Gradle) do aplicativo.
No pom.xml:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>1.0.0</version>
</dependency>
No build.gradle:
compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'
Inicialização da MSAL
Adicione uma referência à MSAL para Java incluindo o seguinte código ao início do arquivo no qual você usará a MSAL4J:
import com.microsoft.aad.msal4j.*;
Em seguida, inicialize a MSAL usando o seguinte código:
IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication cca =
ConfidentialClientApplication
.builder(CLIENT_ID, credential)
.authority(AUTHORITY)
.build();
Em que: Descrição CLIENT_SECRET
É o segredo do cliente criado para o aplicativo no portal do Azure. CLIENT_ID
É a ID do aplicativo (cliente) relativa ao aplicativo registrado no portal do Azure. Você pode encontrar esse valor na página Visão Geral do aplicativo no portal do Azure. AUTHORITY
O ponto de extremidade do STS para o usuário autenticar. Normalmente, https://login.microsoftonline.com/{tenant}
para a nuvem pública, em que {tenant} é o nome do seu locatário ou ID do seu locatário.
Solicitando tokens
Para solicitar um token usando a identidade do aplicativo, use o método acquireToken
:
IAuthenticationResult result;
try {
SilentParameters silentParameters =
SilentParameters
.builder(SCOPE)
.build();
// try to acquire token silently. This call will fail since the token cache does not
// have a token for the application you are requesting an access token for
result = cca.acquireTokenSilently(silentParameters).join();
} catch (Exception ex) {
if (ex.getCause() instanceof MsalException) {
ClientCredentialParameters parameters =
ClientCredentialParameters
.builder(SCOPE)
.build();
// Try to acquire a token. If successful, you should see
// the token information printed out to console
result = cca.acquireToken(parameters).join();
} else {
// Handle other exceptions accordingly
throw ex;
}
}
return result;
Em que: Descrição SCOPE
Contém os escopos solicitados. Para clientes confidenciais, ele deve usar um formato semelhante a {Application ID URI}/.default
para indicar que os escopos solicitados são os estaticamente definidos no objeto de aplicativo definido no portal do Azure (no caso do Microsoft Graph,{Application ID URI}
aponta parahttps://graph.microsoft.com
). Para APIs Web personalizadas,{Application ID URI}
é definido na seção Expor uma API em Registros de aplicativo no portal do Azure.
Ajuda e suporte
Se precisar de ajuda, quiser relatar um problema ou desejar saber mais sobre as opções de suporte, confira Ajuda e suporte para desenvolvedores.
Próximas etapas
Para saber mais sobre aplicativos daemon, confira a página de aterrissagem do cenário.