Exercício – Autorizar o acesso à API do Microsoft Graph com a MSAL

Concluído

Neste exercício, você configurará o aplicativo com permissões e usará a MSAL para acessar informações de perfil de usuário da API do Microsoft Graph (MS Graph).

Adicionar permissões do Microsoft Graph ao registro de aplicativo

Os serviços Web protegidos pelo Microsoft Entra ID definem um conjunto de permissões que fornecem acesso à funcionalidade da API e aos dados expostos por esse serviço. Antes que um aplicativo possa acessar dados ou agir em nome de um usuário, ele deve solicitar que essas permissões sejam aprovadas pelos usuários. Você pode atribuir essas permissões de API ao registro do aplicativo no portal do Azure. Estas são as etapas para atribuir permissões da API do Microsoft Graph ao seu aplicativo.

  1. Na tela Registros de aplicativo, selecione Permissões de API para adicionar acesso às APIs de que seu aplicativo precisa.

    Captura de tela que mostra o menu do painel de permissões de API de um aplicativo registrado com o Microsoft Entra ID no portal do Azure.

    • Selecione Adicionar permissão.

    • Verifique se a guia APIs da Microsoft está selecionada.

    • Na seção APIs da Microsoft comumente usadas, selecione Microsoft Graph e, em seguida, selecione Permissões delegadas.

    • Na seção Permissões delegadas, role para baixo e selecione User.Read na lista. Essa permissão específica é usada para acessar as informações do usuário conectado no ponto de extremidade https://graph.microsoft.com/v1.0/me.

    • Selecione Adicionar Permissões.

      Captura de tela que mostra o painel de permissões de API de um aplicativo registrado com o Microsoft Entra ID no portal do Azure.

Executar o aplicativo

Você pode experimentar a chamada à API do Graph no aplicativo que está em execução do exercício anterior.

  1. Abra o navegador e navegue até http://localhost:8080/msal4j-servlet-graph/. Se você ainda não estiver conectado, será redirecionado para entrar com o Microsoft Entra ID. Na entrada bem-sucedida, você deverá ver uma página, conforme mostrado na imagem a seguir.

    Captura de tela mostrando o botão para o grafo de chamadas exibido na página após a conexão bem-sucedida ao aplicativo de exemplo.

  2. Selecione o botão Grafo de chamadas para fazer uma chamada ao ponto de extremidade /me do Microsoft Graph e ver os detalhes do usuário exibidos.

Visão geral do código para acesso ao Microsoft Graph

Você pode encontrar o código para acessar a API do Microsoft Graph na classe servlet CallGraphServlet.java no diretório msal4j/callgraphwebapp/ do projeto de exemplo. Ele define o ponto de extremidade /call_graph no aplicativo, que faz chamadas autorizadas para o ponto de extremidade https://graph.microsoft.com/v1.0/me da API do Microsoft Graph para recuperar as informações de perfil do usuário conectado. Veja mais detalhes sobre o código de acesso do Graph.

  1. No arquivo ./src/main/resources/authentication.properties, o valor de aad.scopes é definido como o escopo User.Read.

    Os escopos informam ao Microsoft Entra ID o nível de acesso que o aplicativo está solicitando e mapeiam para as permissões no registro do aplicativo. Com base nos escopos solicitados, o Microsoft Entra ID apresenta uma caixa de diálogo de consentimento para o usuário no momento da conexão. Se o usuário consentir com um ou mais escopos, ele será codificado no access_token resultante retornado na resposta de autenticação.

  2. Quando o usuário navega para /call_graph, o aplicativo cria uma instância do IGraphServiceClient (SDK Java do Microsoft Graph), passando o token de acesso do usuário conectado. O cliente do Graph daqui em diante coloca o token de acesso nos cabeçalhos de autorização de suas solicitações. Em seguida, o aplicativo solicita que o cliente do Graph chame o ponto de extremidade /me do Microsoft Graph para gerar detalhes para o usuário conectado.

    O código a seguir é tudo o que um desenvolvedor de aplicativos precisa escrever para acessar o ponto de extremidade /me, desde que ele já tenha um token de acesso válido para o serviço do Graph com o escopo User.Read.

    //CallGraphServlet.java
    User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();