将 .NET 客户端库的使用迁移到 Microsoft Graph

本文是步骤 3:查看应用迁移过程的应用详细信息的一部分。

如果应用当前使用 Azure Active Directory (Azure AD) Graph 客户端库,请切换到 Microsoft Graph .NET 客户端库

本文介绍了迁移到 Microsoft Graph .NET 客户端库的以下常规步骤:

  • 如何创建 Microsoft Graph 客户端,给定访问令牌 (,可以使用 Azure Active Directory 身份验证库 (ADAL) 或 Microsoft 身份验证库 (MSAL) )
  • 如何表述请求
  • 如何使用查询生成器
  • 如何处理集合和分页

迁移步骤概述

以下步骤假定应用使用 ADAL 获取访问令牌来调用 Azure AD Graph。 切换到 MSAL 可以作为 迁移到 MSAL 中所述的单独步骤完成。

  1. 若要获取 Microsoft Graph 的访问令牌,请将 resourceUrlhttps://graph.windows.net 更新为 https://graph.microsoft.com

  2. 在应用中,通过更改以下操作来更新对 Microsoft Graph 客户端库的引用:

    using Microsoft.Azure.ActiveDirectory.GraphClient;
    

    收件人:

    using Microsoft.Graph;
    
  3. 使用包管理器下载和更新 Microsoft Graph NuGet 包 并更新依赖项。

  4. 更新客户端构造函数以创建 GraphServiceClient,而不是 ActiveDirectoryClient。 以下代码片段假定应用使用 AcquireTokenAsyncForUser() 方法获取新令牌。 可以在 active-directory-dotnet-graphapi-console 示例中找到此方法的定义。

    改变:

    ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot,
    async () => await AcquireTokenAsyncForUser());
    

    收件人:

    GraphServiceClient graphClient = new GraphServiceClient(serviceRoot,
       new DelegateAuthenticationProvider(async (requestMessage) => {
          var token = await AcquireTokenAsyncForUser();
          requestMessage.Headers.Authorization = new
             AuthenticationHeaderValue("bearer", token);
       }));
    

    对于 Microsoft Graph 客户端库, serviceRoot 该值还包括版本号。 目前,该值为 https://graph.microsoft.com/v1.0

  5. 通过更改以下方法更新请求以使用 Microsoft Graph 客户端请求生成器语法:

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

    收件人:

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

    注意

    Azure AD Graph 客户端库支持基于 LINQ 的查询语法。 但是,Microsoft Graph 客户端库不会。 因此,需要将相关查询转换为更 RESTful 表达式。

    为此,请更改:

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

    收件人:

    var groups = await
    client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
    
  6. 如果代码在集合中分页,请进行以下小调整。 以下示例对提取组和对其成员进行分页(一次 5 个)进行比较和对比。 虽然 Azure AD Graph 的代码需要提取器构造才能提取组的成员,但 Microsoft Graph 没有此类要求。 简言之,仅显示用户成员、try/catch 和错误条件,并且代码片段适用于单线程控制台应用。

    例如,使用 Azure AD Graph .NET 客户端库更改以下代码:

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

    使用 Microsoft Graph .NET 客户端库访问以下代码:

    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);
    
    
  7. 生成并修复与名称更改相关的任何资源、属性、导航和服务操作错误。

C# 控制台代码片段应用突出显示了 Microsoft Graph 客户端库和 Azure AD Graph 客户端库之间的更多差异。

Azure AD Graph 客户端库仅支持 .NET 平台。 但是,Microsoft Graph 客户端库支持其他 平台和语言

后续步骤