Compartir a través de


Migración del uso de la biblioteca cliente de .NET a Microsoft Graph

Este artículo forma parte del paso 3: revisión de los detalles de la aplicación en la serie de lista de comprobación de planeamiento de la migración de aplicaciones de Graph de Azure AD.

Si la aplicación usa actualmente la biblioteca cliente de Graph de Azure Active Directory (Azure AD), cambie a la biblioteca cliente de .NET de Microsoft Graph.

En este artículo, obtendrá información sobre los siguientes pasos generales para migrar a la biblioteca cliente .NET de Microsoft Graph:

  • Cómo crear un cliente de Microsoft Graph, dado un token de acceso (que puede adquirir mediante la Biblioteca de autenticación de Azure Active Directory (ADAL) o la Biblioteca de autenticación de Microsoft (MSAL))
  • Cómo formular solicitudes
  • Uso de generadores de consultas
  • Cómo controlar colecciones y paginación

Introducción a los pasos de migración

En los pasos siguientes se supone que la aplicación usa ADAL para adquirir tokens de acceso para llamar a Azure AD Graph. El cambio a MSAL se puede realizar como un paso independiente descrito en migración a MSAL.

Actualización de la dirección URL del recurso

Para adquirir un token de acceso a Microsoft Graph, actualice resourceUrl.

De:

https://graph.windows.net

Para:

https://graph.microsoft.com

Actualizar referencias

En la aplicación, actualice las referencias a la biblioteca cliente de Microsoft Graph cambiando:

De:

using Microsoft.Azure.ActiveDirectory.GraphClient;

Para:

using Microsoft.Graph;

Actualización de paquetes y dependencias

Use el administrador de paquetes para descargar y actualizar el paquete NuGet de Microsoft Graph y actualizar las dependencias.

Actualizar constructor de cliente

Actualice el constructor de cliente para crear un GraphServiceClient en lugar de ActiveDirectoryClient. Los siguientes fragmentos de código suponen que la aplicación usa el AcquireTokenAsyncForUser() método para adquirir nuevos tokens. Puede encontrar una definición para este método como parte del ejemplo 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 la biblioteca cliente de Microsoft Graph, el serviceRoot valor también incluye el número de versión. Actualmente, ese valor es https://graph.microsoft.com/v1.0.

Sintaxis de solicitud de actualización

Actualice las solicitudes para usar la sintaxis del generador de solicitudes de cliente de Microsoft Graph cambiando:

De:

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

Para:

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

La biblioteca cliente de Graph de Azure AD admite la sintaxis de consulta basada en LINQ. Sin embargo, la biblioteca cliente de Microsoft Graph no lo hace. Por lo tanto, debe convertir las consultas pertinentes en una expresión más RESTful. Para ello, cambie:

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();

Control de colecciones y paginación

Si las páginas de código a través de colecciones, se requieren ajustes. En el ejemplo siguiente se compara y contrasta la captura de un grupo y la paginación a través de sus miembros, 5 a la vez. Aunque el código de Azure AD Graph requiere una construcción de capturador para capturar los miembros de un grupo, Microsoft Graph no tiene ese requisito. El código está trucated y muestra solo los miembros del usuario, las condiciones try/catch y error no se muestran, y los fragmentos de código son para una aplicación de consola de un solo subproceso.

Por ejemplo, cambie el código siguiente mediante la biblioteca cliente de .NET de 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);

Al código siguiente mediante la biblioteca cliente de .NET de 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);

Prueba, validación y resolución

Compile y corrija los errores de acción de recurso, propiedad, navegación y servicio relacionados con los cambios de nombre.

Recursos

Paso siguiente