Compartilhar via


Migrar a utilização da biblioteca de cliente .NET para o Microsoft Graph

Este artigo faz parte do Passo 3: rever os detalhes da aplicação na série de listas de verificação de planeamento de migração de aplicações do Azure AD Graph.

Se a aplicação utilizar atualmente a biblioteca de cliente do Graph do Azure Active Directory (Azure AD), mude para a biblioteca de cliente .NET do Microsoft Graph.

Neste artigo, irá aprender os seguintes passos gerais para migrar para a biblioteca de cliente .NET do Microsoft Graph:

  • Como criar um cliente do Microsoft Graph, com um token de acesso (que pode adquirir com a Biblioteca de Autenticação do Azure Active Directory (ADAL) ou a Biblioteca de Autenticação da Microsoft (MSAL))
  • Como formular pedidos
  • Como utilizar construtores de consultas
  • Como processar coleções e paginação

Descrição geral dos passos de migração

Os passos seguintes partem do princípio de que a sua aplicação utiliza a ADAL para adquirir tokens de acesso para chamar Azure AD Graph. Mudar para MSAL pode ser feito como um passo separado descrito na migração para MSAL.

Atualizar o URL do recurso

Para adquirir um token de acesso para o Microsoft Graph, atualize resourceUrl

De:

https://graph.windows.net

Para:

https://graph.microsoft.com

Atualizar referências

Na sua aplicação, atualize as referências à biblioteca de cliente do Microsoft Graph ao alterar:

De:

using Microsoft.Azure.ActiveDirectory.GraphClient;

Para:

using Microsoft.Graph;

Atualizar pacotes e dependências

Utilize o gestor de pacotes para transferir e atualizar o pacote NuGet do Microsoft Graph e atualizar as dependências.

Atualizar construtor de cliente

Atualize o construtor do cliente para criar um GraphServiceClient em vez de ActiveDirectoryClient. Os fragmentos de código seguintes partem do princípio de que a sua aplicação está a utilizar o AcquireTokenAsyncForUser() método para adquirir novos tokens. Pode encontrar uma definição para este método como parte do exemplo active-directory-dotnet-graphapi-console.

De:

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 cliente do Microsoft Graph, o serviceRoot valor também inclui o número da versão. Atualmente, esse valor é https://graph.microsoft.com/v1.0.

Atualizar sintaxes de pedidos

Atualize os pedidos para utilizar a sintaxe do construtor de pedidos de cliente do Microsoft Graph ao alterar:

De:

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

Para:

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

A biblioteca de cliente do Azure AD Graph suportava sintaxe de consulta baseada em LINQ. No entanto, a biblioteca de cliente do Microsoft Graph não. Consequentemente, tem de converter as consultas relevantes numa expressão mais RESTful. Para tal, altere:

De:

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

Para:

var groups = await
client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();

Processar coleções e paginação

Se o código for apresentado através de coleções, são necessários ajustes. O exemplo seguinte compara e contrasta a obtenção de um grupo e a paginação através dos respetivos membros, 5 de cada vez. Embora o código do Azure AD Graph necessite de uma construção de obtenção para obter os membros de um grupo, o Microsoft Graph não tem esse requisito. O código é trucado e mostra apenas os membros do utilizador, as condições de tentativa/captura e de erro não são apresentadas e os fragmentos de código destinam-se a uma aplicação de consola de thread único.

Por exemplo, altere o seguinte código com a biblioteca de cliente .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 seguinte com a biblioteca de cliente .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);

Testar, validar resolve

Crie e corrija quaisquer erros de ação de recurso, propriedade, navegação e serviço relacionados com alterações de nome.

Recursos

  • A aplicação de fragmentos de consola C# destaca mais as diferenças entre a biblioteca de cliente do Microsoft Graph e a biblioteca de cliente do Azure AD Graph.
  • A biblioteca de cliente do Azure AD Graph suporta apenas a plataforma .NET. No entanto, a biblioteca de cliente do Microsoft Graph suporta plataformas e idiomas adicionais.

Próxima etapa