Início Rápido: adquirir um token e chamar o Microsoft Graph de um aplicativo daemon Javan

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.

Diagrama mostrando como o aplicativo de exemplo gerado por este início rápido funciona.

Pré-requisitos

Para executar este exemplo, você precisa de:

Registrar e baixar o aplicativo de início rápido

Dica

As etapas neste artigo podem variar ligeiramente com base no portal do qual você começa.

Etapa 1: Registrar o aplicativo

Para registrar seu aplicativo e adicionar as informações de registro do aplicativo à solução manualmente, siga estas etapas:

  1. Faça login no Centro de administração do Microsoft Entra como pelo menos um Desenvolvedor de aplicativos.
  2. Se você tiver acesso a vários locatários, use o ícone Configurações no menu superior para alternar para o locatário no qual deseja registrar o aplicativo no menu Diretórios + assinaturas.
  3. Navegue até Identidade>Inscrições>Registros de inscrições.
  4. Selecione Novo registro.
  5. Insira um Nome para seu aplicativo, por exemplo, Daemon-console. Os usuários do seu aplicativo podem ver esse nome e você pode alterá-lo mais tarde.
  6. Selecione Registrar.
  7. Em Gerenciar, selecione Certificados e segredos.
  8. Em Segredos do cliente, selecione Novo segredo do cliente, insira um nome e selecione Adicionar. Registre o valor secreto em uma localização segura para uso em uma etapa posterior.
  9. Em Gerenciar, selecione Permissões de API>Adicionar uma permissão. Selecione Microsoft Graph.
  10. Selecione Permissões de aplicativo.
  11. No nó Usuário, selecione User.Read.All e selecione Adicionar permissões.

Etapa 2: Baixar o projeto Java

Baixar o projeto de daemon Java

Etapa 3: Configurar o projeto Java

  1. Extraia o arquivo. zip em uma pasta local próxima à raiz do disco, como C:\Azure-Samples.
  2. Navegue até a subpasta msal-client-credential-secret.
  3. Edite src\main\resources\application.properties e substitua os valores dos campos AUTHORITY, CLIENT_ID e SECRET pelo seguinte snippet:
  AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
  CLIENT_ID=Enter_the_Application_Id_Here
  SECRET=Enter_the_Client_Secret_Here

Em que:

  • Enter_the_Application_Id_Here - é a ID do aplicativo (cliente) que você registrou.
  • Enter_the_Tenant_Id_Here: substitua esse valor pela ID do Locatário ou pelo Nome do locatário (por exemplo, contoso.microsoft.com).
  • Enter_the_Client_Secret_Here – substitua esse valor pelo segredo do cliente criado na etapa 1.

Dica

Para encontrar os valores de ID do aplicativo (cliente), ID de diretório (locatário), acesse a página Visão Geral do aplicativo. Para gerar uma nova chave, acesse a página Certificados e segredos.

Se você tentar executar o aplicativo neste ponto, receberá o erro HTTP 403 – Proibido: Insufficient privileges to complete the operation. Este erro acontece porque qualquer permissão somente do aplicativo exige o Consentimento do administrador: um Administrador Global do seu diretório precisa dar consentimento ao seu aplicativo. Selecione uma das opções abaixo, dependendo de sua função:

Administrator de locatário global

Se você é um administrador de locatários global, acesse a página Permissões de API em Registros de aplicativo e selecione Fornecer o consentimento do administrador para {Nome do Locatário} (em que {Nome do Locatário} é o nome do seu diretório).

Usuário padrão

Se você for usuário padrão do seu locatário, precisará pedir que o Administrador Global dê consentimento de administrador 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

Em que:

  • Enter_the_Tenant_Id_Here – substitua esse valor pela ID do locatário ou pelo Nome do locatário (por exemplo, contoso.microsoft.com)
  • Enter_the_Application_Id_Here - é a ID do aplicativo (cliente) que você registrou.

Etapa 5: 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 da amostra, 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.
CLIENT_ID É a ID do aplicativo (cliente) que você registrou. Você pode encontrar esse valor na página Visão Geral do aplicativo.
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 o 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 (no caso do Microsoft Graph, {Application ID URI} aponta para https://graph.microsoft.com). Para APIs Web personalizadas, o {Application ID URI} é definido na seção Expor uma API em Registros de aplicativo.

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.