Migrar o uso da biblioteca de clientes do .NET para o Microsoft Graph

Este artigo faz parte da etapa 3: examine os detalhes do aplicativo do processo para migrar aplicativos.

Se o aplicativo usar atualmente a biblioteca de clientes do Graph do Azure Active Directory (Azure AD), alterne para a biblioteca de clientes do Microsoft Graph .NET.

Neste artigo, você aprenderá as seguintes etapas gerais para migrar para a biblioteca de clientes do .NET do Microsoft Graph:

  • Como criar um cliente do Microsoft Graph, dado um token de acesso (que você pode adquirir usando a ADAL (Biblioteca de Autenticação do Azure Active Directory) ou a MSAL (Biblioteca de Autenticação da Microsoft))
  • Como formular solicitações
  • Como usar construtores de consultas
  • Como lidar com coleções e paginação

Visão geral das etapas de migração

As etapas a seguir pressupõem que seu aplicativo use a ADAL para adquirir tokens de acesso para chamar Azure AD Graph. A alteração para MSAL pode ser feita como uma etapa separada descrita na migração para o MSAL.

  1. Para adquirir um token de acesso ao Microsoft Graph, atualize resourceUrl de https://graph.windows.net para https://graph.microsoft.com.

  2. Em seu aplicativo, atualize as referências à biblioteca de clientes do Microsoft Graph alterando:

    using Microsoft.Azure.ActiveDirectory.GraphClient;
    

    Para:

    using Microsoft.Graph;
    
  3. Use o gerenciador de pacotes para baixar e atualizar o pacote NuGet do Microsoft Graph e atualizar dependências.

  4. Atualize o construtor do cliente para criar um GraphServiceClient, em vez de ActiveDirectoryClient. Os snippets de código a seguir supõem que seu aplicativo está usando o AcquireTokenAsyncForUser() método para adquirir novos tokens. Você pode encontrar uma definição para esse método como parte do exemplo active-directory-dotnet-graphapi-console.

    Mudar:

    ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot,
    async () => await AcquireTokenAsyncForUser());
    

    Para:

    GraphServiceClient graphClient = new GraphServiceClient(serviceRoot,
       new DelegateAuthenticationProvider(async (requestMessage) => {
          var token = await AcquireTokenAsyncForUser();
          requestMessage.Headers.Authorization = new
             AuthenticationHeaderValue("bearer", token);
       }));
    

    Para a biblioteca de clientes do Microsoft Graph, o serviceRoot valor também inclui o número da versão. Atualmente, esse valor é https://graph.microsoft.com/v1.0.

  5. Atualize as solicitações para usar a sintaxe do construtor de solicitações de cliente do Microsoft Graph, alterando:

    signedInUser = (User)await client.Me.ExecuteAsync();
    

    Para:

    signedInUser = (User)await client.Me.Request().GetAsync();
    

    Observação

    A biblioteca de clientes do Azure AD Graph tinha suporte à sintaxe de consulta baseada em LINQ. No entanto, a biblioteca de clientes do Microsoft Graph não. Consequentemente, você precisa converter as consultas relevantes em uma expressão mais RESTful.

    Para fazer isso, altere:

    var groups = await
    client.Groups.Where(g => g.DisplayName.StartsWith("a")).ExecuteAsync();
    

    Para:

    var groups = await
    client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
    
  6. Se suas páginas de código por meio de coleções, faça os ajustes menores a seguir. O exemplo a seguir compara e contrasta buscando um grupo e paginando por meio de seus membros, 5 de cada vez. Embora o código para Azure AD Graph exija um constructo de buscador para buscar os membros de um grupo, o Microsoft Graph não tem esse requisito. Para ser conciso, somente membros do usuário são exibidos, condições de tentativa/captura e erro não são mostradas e os snippets de código são para um aplicativo de console com thread único.

    Como exemplo, altere o seguinte código usando a biblioteca de clientes do .NET do Azure AD Graph:

    Group retrievedGroup = client.Groups.
        Where(g => g.ObjectId.Equals(id)).ExecuteAsync().Result;
    IGroupFetcher retrievedGroupFetcher = (IGroupFetcher) retrievedGroup;
    
    var membersPage = retrievedGroupFetcher.Members.Take(5).ExecuteAsync().Result;
    Console.WriteLine(" Members:");
    do
    {
        List<IDirectoryObject> members = membersPage.CurrentPage.ToList();
        foreach (IDirectoryObject member in members)
        {
            if (member is User)
            {
                User memberUser = (User)member;
                Console.WriteLine("        User: {0} ", memberUser.DisplayName);
            }
        }
        membersPage = membersPage.GetNextPageAsync().Result;
    } while (membersPage != null);
    
    

    Para o código a seguir usando a biblioteca de clientes .NET do Microsoft Graph:

    var membersPage = client.Groups[id].Members.Request().Top(5).GetAsync().Result;
    Console.WriteLine(" Members:");
    do
    {
        List<DirectoryObject> members = membersPage.CurrentPage.ToList();
        foreach (DirectoryObject member in members)
        {
            if (member is User)
            {
                User memberUser = (User)member;
                Console.WriteLine("        User: {0} ", memberUser.DisplayName);
            }
        }
        if (membersPage.NextPageRequest != null)
            membersPage = membersPage.NextPageRequest.GetAsync().Result;
        else membersPage = null;
    } while (membersPage != null);
    
    
  7. Crie e corrija qualquer recurso, propriedade, navegação e erros de ação de serviço relacionados a alterações de nome.

O aplicativo de snippets de console C# destaca mais as diferenças entre a biblioteca de clientes do Microsoft Graph e Azure AD biblioteca de clientes do Graph.

A biblioteca de clientes do Azure AD Graph dá suporte apenas à plataforma .NET. No entanto, a biblioteca de clientes do Microsoft Graph dá suporte a plataformas e idiomas adicionais.

Próxima etapa