Compartilhar via


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:

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.

Já configurado Esses atributos já estão configurados no seu aplicativo.

Etapa 2: Baixar o projeto Java

Observação

Enter_the_Supported_Account_Info_Here

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 para https://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.