Azure AD B2C и Graph: невозможно перечислить пользователей с memberOf - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь составить список пользователей из моего клиента B2C вместе с группами, к которым они принадлежат.Я подключаюсь к Графику в режиме приложения следующим образом:

var clientCred = new ClientCredential("<client id>",  "<secret>");
var authContext = new AuthenticationContext("https://login.windows.net/" + "<b2c tenant>");
var authResult = authContext.AcquireTokenAsync("https://graph.microsoft.com/", clientCred).Result;
var client = new GraphServiceClient(
    new DelegateAuthenticationProvider(
        async (requestMessage) =>
        {
            var token = authResult.AccessToken;
            var result = await Task.FromResult(token);

            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
        }));

var users = client
    .Users
    .Request()
    .Select("memberOf")  // not working
    //.Select(u => new { u.MemberOf }) // not working
    .Expand("memberOf") // not working
    //.Expand(u => new { u.MemberOf }) // not working
    .GetAsync()
    .Result
    .ToList();

В результате я получаю список моих пользователей с некоторыми данными, но поле MemberOf всегда пустое (хотя я уверен на 100%у них есть хотя бы одна назначенная группа).Тем не менее, это работает, как и ожидалось:

var u = client.Users["<id>"].MemberOf.Request().GetAsync().Result;

Просто чтобы быть уверенным, я предоставил полные разрешения приложения, ничего не изменилось.Я что-то упустил?

1 Ответ

0 голосов
/ 04 декабря 2018

Это мой первый ответ, надеюсь, я смогу вам помочь.

Вам следует использовать бета-версию, поскольку в v1.0 не реализовано расширение "memberOf", чтобы изменить sdk на бета-версию, которую вы должныadd:

 client.BaseUrl = "https://graph.microsoft.com/beta";

Я обычно включаю расширение с помощью QueryOption следующим образом:

 List<QueryOption> options = new List<QueryOption> { new QueryOption("$Expand", "MemberOf") };

Но я думаю, что при использовании его не будет проблем

Попробуйте этот код:

var clientCred = new ClientCredential("<client id>",  "<secret>");
var authContext = new AuthenticationContext("https://login.windows.net/" + "<b2c tenant>");
var authResult = authContext.AcquireTokenAsync("https://graph.microsoft.com/", clientCred).Result;
        var client = new GraphServiceClient(
            new DelegateAuthenticationProvider(
                async (requestMessage) =>
                {
                    var token = authResult.AccessToken;
                    var result = await Task.FromResult(token);

                    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                }));
        //Change to the beta version
        client.BaseUrl = "https://graph.microsoft.com/beta";
        //Parameters of the query
         List<QueryOption> options = new List<QueryOption> { new QueryOption("$Expand", "MemberOf") };
        // query with parameters
         var users = await graphClient.Users.Request(options).GetAsync();
...