Partilhar via


Guia de início rápido: adquira um token e chame o Microsoft Graph a partir de um aplicativo daemon Java

Neste início rápido, você baixa e executa 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 serviço do Windows pode ser executado com uma identidade de aplicativo, em vez da identidade de um usuário.

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

Pré-requisitos

Para executar este exemplo, você precisa:

Registar e transferir a aplicação do início rápido

Gorjeta

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

Passo 1: Registar a candidatura

Para registar a sua aplicação e adicionar as informações de registo da aplicação à sua solução manualmente, siga os passos a seguir:

  1. Entre 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é Registros de aplicativos de identidade>>.
  4. Selecione Novo registo.
  5. Introduza um Nome para a sua aplicação, por exemplo Daemon-console. Os usuários do seu aplicativo podem ver esse nome e você pode alterá-lo mais tarde.
  6. Selecione Registar.
  7. Em Gerenciar, selecione Certificados & segredos.
  8. Em Segredos do cliente, selecione Novo segredo do cliente, insira um nome e selecione Adicionar. Registre o valor secreto em um local seguro 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 aplicação.
  11. Em Nó Usuário , selecione User.Read.All e, em seguida, selecione Adicionar permissões.

Etapa 2: Faça o download do projeto Java

Faça o download do projeto daemon Java

Etapa 3: Configurar o projeto Java

  1. Extraia o arquivo zip para uma pasta local próxima à raiz do disco, como C:\Azure-Samples.
  2. Navegue até a msal-client-credential-secret subpasta.
  3. Edite src\main\resources\application.properties e substitua os valores dos campos AUTHORITY, CLIENT_IDe SECRET com o seguinte trecho:
  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 - é o ID da Aplicação (cliente) que registou.
  • Enter_the_Tenant_Id_Here- substitua esse valor pelo ID do Locatário ou Nome do Locatário (por exemplo, contoso.microsoft.com).
  • Enter_the_Client_Secret_Here - Substitua este valor pelo segredo do cliente criado no passo 1.

Gorjeta

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

Se você tentar executar o aplicativo neste ponto, você receberá HTTP 403 - Erro proibido : Insufficient privileges to complete the operation. Este erro acontece porque qualquer permissão apenas para aplicações requer o consentimento do administrador: um Administrador Global do seu diretório tem de dar o seu consentimento para a sua aplicação. Selecione uma das opções abaixo, dependendo da sua função:

Administrador de locatário global

Se for um administrador de inquilino global, aceda à página Permissões da API em Registos de aplicações e selecione Conceder consentimento de administrador para {Nome do Inquilino} (Onde {Nome do Inquilino} é o nome do seu diretório).

Usuário padrão

Se for um utilizador padrão do seu inquilino, terá de pedir a um Administrador Global para conceder consentimento de administrador para a sua aplicação. Para fazer isso, forneça 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 pelo ID do Locatário ou Nome do Locatário (por exemplo, contoso.microsoft.com)
  • Enter_the_Application_Id_Here - é o ID da Aplicação (cliente) que registou.

Etapa 5: Executar o aplicativo

Você pode testar o exemplo diretamente executando o método principal de ClientCredentialGrant.java do seu IDE.

A partir do shell ou da linha de comando:

$ mvn clean compile assembly:single

Isso gerará um msal-client-credential-secret-1.0.0.jar arquivo em seu /targets diretório. Execute isso usando seu executável Java como abaixo:

$ java -jar msal-client-credential-secret-1.0.0.jar

Após a execução, o aplicativo deve 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 um texto sem formatação aos arquivos do projeto, por motivos de segurança, é recomendável usar 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, consulte estas instruções no mesmo repositório GitHub para este exemplo, mas na segunda pasta MSAL-client-credential-certificate.

Mais informações

MSAL Java

MSAL Java é a biblioteca usada para entrar usuários e solicitar tokens usados para acessar uma API protegida pela plataforma de identidade da Microsoft. Conforme descrito, esse guia de início rápido solicita tokens usando a própria identidade do aplicativo em vez de permissões delegadas. O fluxo de autenticação usado neste caso é conhecido como fluxo oauth de credenciais de cliente. Para obter mais informações sobre como usar o MSAL Java com aplicativos daemon, consulte este artigo.

Adicione MSAL4J ao seu aplicativo usando Maven ou Gradle para gerenciar suas dependências fazendo as seguintes alterações no arquivo pom.xml (Maven) ou build.gradle (Gradle) do aplicativo.

Em pom.xml:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

Em build.gradle:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

Inicialização da MSAL

Adicione uma referência ao MSAL para Java adicionando o seguinte código à parte superior do arquivo onde você usará o MSAL4J:

import com.microsoft.aad.msal4j.*;

Em seguida, inicialize a MSAL com o código seguinte:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
Em que: Description
CLIENT_SECRET É o segredo do cliente criado para o aplicativo.
CLIENT_ID É o ID do aplicativo (cliente) para o aplicativo registrado. Você pode encontrar esse valor na página Visão geral do aplicativo.
AUTHORITY O ponto final STS para o utilizador autenticar. Geralmente https://login.microsoftonline.com/{tenant} para nuvem pública, onde {tenant} é o nome do seu locatário ou seu ID de locatário.

Solicitar tokens

Para solicitar um token usando a identidade do aplicativo, use acquireToken o método:

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: Description
SCOPE Contém os escopos solicitados. Para clientes confidenciais, isso deve usar o formato semelhante para {Application ID URI}/.default indicar que os escopos solicitados são os definidos estaticamente no objeto do aplicativo (para o Microsoft Graph, {Application ID URI} aponta para https://graph.microsoft.com). Para APIs da Web personalizadas, {Application ID URI} é definido na seção Expor uma API em Registros de aplicativos.

Ajuda e suporte

Se precisar de ajuda, quiser comunicar um problema ou quiser saber mais sobre as suas opções de suporte, consulte Ajuda e suporte para programadores.

Próximos passos

Para saber mais sobre aplicativos daemon, consulte a página inicial do cenário.