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.