尝试使用MSGrpah API获取用户列表时,未从AAD中获取所有用户

时间:2019-02-13 16:13:49

标签: c# azure azure-active-directory

这是我的代码,该代码仅从活动目录中提取100个用户。我还授予了应用程序和委派部分中的“读取所有用户个人资料权限”。

namespace MVCDemoGraphAPI.Controllers
{
    public class HomeController : Controller
    {
        private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];

        private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];

        private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];

        private static string appKey = ConfigurationManager.AppSettings["ida:AppKey"];

        public async Task<string> Users()

        {
            string authority = string.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

            AuthenticationContext authContext = new AuthenticationContext(authority);
            AuthenticationResult result = null;

            try
            {
                result = await authContext.AcquireTokenAsync("https://graph.microsoft.com",
                    new ClientCredential(clientId, appKey));
            }
            catch (Exception)
            {

                throw;
            }

            //Now call the Graph API
            HttpClient client = new HttpClient();

             HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/users");

            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            HttpResponseMessage response = await client.SendAsync(request);

            string output = await response.Content.ReadAsStringAsync();
            return output;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您必须按照以下说明使用分页过滤器: https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/howto/azure-ad-graph-api-supported-queries-filters-and-paging-options, 主要是向前翻页。

我建议使用c#图形客户端Nuget,然后使用以下代码:

  var users = await graphClient.Users.Request().GetAsync();
try
    {
        while (users != null)
        {
            var usersList = users.CurrentPage.ToList();
            count = count + usersList.Count();
            users = await users.NextPageRequest.GetAsync();
        }
    }
    catch
    {
        //
    }