Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo faz parte da Etapa 3: examinar detalhes do aplicativo na série de lista de verificação de planejamento de migração de aplicativo do Azure AD Graph.
Se o seu aplicativo usa atualmente a biblioteca de cliente do Graph do Azure Active Directory (Azure AD), alterne para a biblioteca de cliente .NET do Microsoft Graph.
Neste artigo, você aprende as seguintes etapas gerais para migrar para a biblioteca de cliente .NET do Microsoft Graph:
- Como criar um cliente Microsoft Graph, com um token de acesso (que você pode adquirir usando a Biblioteca de Autenticação do Active Directory (ADAL) ou Azure a Biblioteca de Autenticação da Microsoft (MSAL))
- 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 o Azure AD Graph. A alternância para a MSAL pode ser feita como uma etapa separada descrita na migração para a MSAL.
Atualizar a URL do recurso
Para adquirir um token de acesso ao Microsoft Graph, atualize resourceUrl
De:
https://graph.windows.net
Para:
https://graph.microsoft.com
Referências de atualização
Em seu aplicativo, atualize as referências à biblioteca de clientes do Microsoft Graph alterando:
De:
using Microsoft.Azure.ActiveDirectory.GraphClient;
Para:
using Microsoft.Graph;
Pacotes de atualização e dependências
Use o gerenciador de pacotes para baixar e atualizar o pacote NuGet do Microsoft Graph e atualizar as dependências.
Atualizar construtor do cliente
Atualize o construtor do cliente para criar um GraphServiceClient em vez de ActiveDirectoryClient. Os snippets de código a seguir pressupõ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.
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.
Sintaxes de solicitação de atualização
Atualize as solicitações para usar a sintaxe do construtor de solicitações do cliente Microsoft Graph, alterando:
De:
signedInUser = (User)await client.Me.ExecuteAsync();
Para:
signedInUser = (User)await client.Me.Request().GetAsync();
A biblioteca de cliente do Azure AD Graph dava 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:
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();
Lidar com coleções e paginação
Se suas páginas de código por meio de coleções, ajustes serão necessários. O exemplo a seguir compara e contrasta a busca de um grupo e a paginação por meio de seus membros, cinco por vez. Embora o código do Azure AD Graph exija uma construção de buscador para buscar os membros de um grupo, o Microsoft Graph não tem esse requisito. O código é trucado e mostra apenas membros do usuário, as condições de tentativa/captura e erro não são mostradas e os trechos de código são para um aplicativo de console de thread único.
Como exemplo, altere o seguinte código usando a biblioteca de clientes .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 seguinte código usando 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, resolver
Crie e corrija quaisquer erros de recurso, propriedade, navegação e ação de serviço relacionados a alterações de nome.
Recursos
- O aplicativo de trechos de console do C# realça mais das diferenças entre a biblioteca de clientes do Microsoft Graph e a biblioteca de clientes do Azure AD Graph.
- A biblioteca de clientes do Graph do Azure AD dá suporte apenas à plataforma .NET. No entanto, a biblioteca de cliente do Microsoft Graph dá suporte a plataformas e idiomas adicionais.