Guia de início rápido: adquira um token e chame a API do Microsoft Graph de um aplicativo de console Java usando a identidade do aplicativo
Boas-vindas! Esta provavelmente não é a página que você estava esperando. Enquanto trabalhamos em uma correção, este link deve levá-lo ao artigo certo:
Pedimos desculpas pelo inconveniente e agradecemos a sua paciência enquanto trabalhamos para resolver este problema.
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.
Pré-requisitos
Para executar este exemplo, você precisa:
- Java Development Kit (JDK) 8 ou superior
- Maven
Transferir e configurar a aplicação de início rápido
Etapa 1: Configurar o aplicativo no portal do Azure
Para que o exemplo de código para este início rápido funcione, você precisa criar um segredo do cliente e adicionar a permissão de aplicativo User.Read.All da Graph API.
Seu aplicativo está configurado com esses atributos.
Etapa 2: Faça o download do projeto Java
Nota
Enter_the_Supported_Account_Info_Here
Etapa 3: consentimento do administrador
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 de aplicações na nuvem 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 Aplicações na Cloud
Se for um Administrador de Aplicações na Nuvem do seu inquilino, aceda à página Permissões da API, selecione Conceder consentimento de administrador para Enter_the_Tenant_Name_Here.
Usuário padrão
Se for um utilizador padrão do seu inquilino, terá de pedir a um Administrador de Aplicações na Nuvem 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
Etapa 4: 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 arquivo msal-client-credential-secret-1.0.0.jar em seu diretório /targets. 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 no portal do Azure. CLIENT_ID
É o ID de Aplicação (cliente) da aplicação registada no portal do Azure. Pode encontrar este valor na página Descrição geral da aplicação no portal do Azure. AUTHORITY
O ponto final STS para o utilizador autenticar. Normalmente https://login.microsoftonline.com/{tenant}
para nuvem pública, onde {tenant} é o nome do seu inquilino ou do seu ID de inquilino.
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 que estão sendo solicitados são os definidos estaticamente no objeto de aplicativo definido no portal do Azure (para o 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 aplicativos no portal do Azure.
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.