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.
Para adquirir um token de acesso ao Microsoft Graph, atualize resourceUrl de
https://graph.windows.net
parahttps://graph.microsoft.com
.Em seu aplicativo, atualize as referências à biblioteca de clientes do Microsoft Graph alterando:
using Microsoft.Azure.ActiveDirectory.GraphClient;
Para:
using Microsoft.Graph;
Use o gerenciador de pacotes para baixar e atualizar o pacote NuGet do Microsoft Graph e atualizar dependências.
Atualize o construtor do cliente para criar um
GraphServiceClient
, em vez deActiveDirectoryClient
. Os snippets de código a seguir supõem que seu aplicativo está usando oAcquireTokenAsyncForUser()
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
.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();
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);
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.