Запрос Microsoft Graph API с использованием externalUserState C # - PullRequest
0 голосов
/ 21 мая 2019

Здравствуйте, я пытаюсь написать простое консольное приложение, которое я собираюсь превратить в пакетный файл, и получить список внешних пользователей, которые были приглашены по электронной почте, и теперь у них есть гостевые учетные записи в нашем клиенте Azure, и они выкупили их. URL, который был отправлен им по электронной почте. Когда они выкупают, их extenalUserState устанавливается на «Принят». Я хочу узнать, какие из них имеют этот статус.

Мне сказали, что я должен указывать на бета-версию API, а не v.1.0 конечной точки графа.

У меня есть следующий элементарный код, который я написал, рассматривая различные примеры, которые я мог найти в документации GitHub / MS для API и т. Д.

using Microsoft.Graph;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace CreateAzureADUser
{
    class Program
    {
        static string TenantDomain;
        static string TenantId;
        static string ClientId;
        static string ClientSecret;
        static void Main(string[] args)
        {
            GetUsers();
            //Console.WriteLine("------------------------------------------\n\n");
            //GetGroupsAndMembers();
            //CreateAzureADUserNow();
        }

        private static void GetUsers()
        {
            var graphServiceClient = CreateGraphServiceClient();


            var users = graphServiceClient.Users.Request().Filter("userType eq 'Guest' and startswith(mail,'phs')")
                                                          .Select("id,mail,OnPremisesExtensionAttributes,userType,displayName,externalUserState")
                                                          .GetAsync()
                                                          .Result;



            Console.WriteLine("Users found: {0}", users.Count);
            Console.WriteLine();

            foreach (var item in users)
            {
                Console.WriteLine("displayName: {3} \nuser id: {0} \nuser email: {1} \nExtensionAttribute8: {2}\n", item.Id, item.Mail, item.OnPremisesExtensionAttributes.ExtensionAttribute8, item.DisplayName);
            }



        }

        public static GraphServiceClient CreateGraphServiceClient()
        {
            TenantDomain = "mycompanytenant.onmicrosoft.com";
            TenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            ClientId = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
            ClientSecret = "zzzzzzzzzzzz";

            var clientCredential = new ClientCredential(ClientId, ClientSecret);
            var authenticationContext = new AuthenticationContext($"https://login.microsoftonline.com/mycompanytenant.onmicrosoft.com");
            var authenticationResult = authenticationContext.AcquireTokenAsync("https://graph.microsoft.com", clientCredential).Result;


            var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authenticationResult.AccessToken);
                return Task.FromResult(0);
            });

            // Use this for v.1.0 endpoint
            //return new GraphServiceClient(delegateAuthProvider);

            // Use this for connecting to beta endpoint
            return new GraphServiceClient("https://graph.microsoft.com/beta", delegateAuthProvider);
        }
}
}

Когда я запускаю отладчик, я не вижу «ExternalUserState» как атрибут для возвращаемых пользователей.

Как получить доступ к атрибуту ExternalUserState объекта гостевого пользователя?

1 Ответ

2 голосов
/ 21 мая 2019

Вы используете SDK, поэтому вы используете Graph v1.0, а не Beta. Все SDK генерируются из метаданных v1.0, поэтому бета-свойства и методы просто не существуют в моделях.

Время от времени на GitHub выдвигается бета-версия, но обычно она отстает от нескольких версий. В настоящее время последняя доступная бета-версия SDK выглядит как v1.12.0 (для справки, текущий SDK v1.15).

...