Пришлось немного повозиться, но в конце концов это не так уж и сложно. Вокруг Azure есть много библиотек, но в основном это всего лишь набор HTTP-запросов и ответов. Даже в консольном приложении... Я начал с создания PublicClientApplicationBuilder:
var options = new PublicClientApplicationOptions()
{
ClientId = <**clientid**>,
TenantId = <**tenantid**>,
AzureCloudInstance = AzureCloudInstance.AzurePublic,
};
var client = PublicClientApplicationBuilder.CreateWithApplicationOptions(options).Build();
Вместо этого я также могу создать ConfidentialClientApplication, но это позволит мне войти в систему в интерактивном режиме, если это необходимо.
Затем настройте области видимости:
var scopes = new List<string>() { "https://graph.microsoft.com/.default" };
Поскольку я хотел войти в систему, используя имя пользователя и пароль, я должен использовать это:
var token = await client.AcquireTokenInteractive(scopes).ExecuteAsync();
Но если я хочу войти в систему с помощью кода, я также могу использовать это:
var password = new SecureString();
foreach (var c in <**password**>) { password.AppendChar(c); }
var token = await client.AcquireTokenByUsernamePassword(scopes, <**account**>, password).ExecuteAsync();
На данный момент я авторизован как указанный пользователь. Итак, теперь все, что мне нужно, это получить любые данные, которые мне нравятся, в строках JSON...
public static async Task<string> ExecCmd(string name, string url, string token)
{
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
string result = await GetHttpContentWithToken(url, token);
JObject json = JsonConvert.DeserializeObject(result) as JObject;
File.WriteAllText(name, json.ToString());
return result;
}
Поскольку я просто хочу прочитать данные в виде текстовых файлов, я просто выполняю действие с использованием определенного и записываю его в формате JSON в файл. Итак, используя этот простой метод, я теперь могу использовать это:
await ExecCmd("Profile.txt", "https://graph.microsoft.com/v1.0/me/", token.AccessToken);
await ExecCmd("Groups.txt", "https://graph.microsoft.com/v1.0/groups", token.AccessToken);
await ExecCmd("Users.txt", "https://graph.microsoft.com/v1.0/users", token.AccessToken);
Они предоставят мне (1) профиль текущего пользователя, (2) группы AD и (3) пользователей AD. И, возможно, еще немного... Я могу использовать этот ExecCmd для извлечения гораздо большего количества данных, если захочу. Но есть еще кое-что, о чем следует помнить! Чтобы все это заработало, вам также необходимо настроить приложение Azure и убедиться, что все права доступа назначены и утверждены! Итак, в Azure AD вам нужно добавить «Регистрацию приложения» и возиться с настройками... (Эксперты Azure сейчас ужасно шокированы, но когда вы хотите учиться, вам просто нужно пытаться и терпеть неудачу, пока вы не успешно...) Также установите «Тип клиента по умолчанию» на «общедоступный клиент» для зарегистрированного приложения. В Azure с зарегистрированным приложением вам также необходимо установить соответствующие разрешения API! В противном случае у вас не будет доступа. И поскольку мне нужен доступ к Active Directory, мне нужно добавить разрешения в «Azure Active Directory Graph». Я могу сделать это внутри Azure или с помощью области при вызове AcquireTokenInteractive(). Например, используя "https://graph.windows.net/Directory.Read.All" вместо "https://graph.windows.net/.default". Получив интерактивный доступ к токену, вы также можете получить больше токенов с помощью client.AcquireTokenSilent(). Отсюда становится немного сложно, особенно если вы хотите получить доступ к большому количеству различных предметов. К счастью, Active Directory — это в основном сам каталог, группы, пользователи и участники. Лично я предпочитаю предоставлять доступ с веб-сайта Azure, но это довольно интересно. В любом случае, я хотел аутентифицировать пользователей с помощью Azure и теперь знаю, как это сделать. Это все еще оставляет гораздо больше вопросов, но все это в основном отвечает на мой вопрос... Я буду использовать это как ответ, так как другие могут найти его полезным...
person
Wim ten Brink
schedule
04.06.2019
https://graph.microsoft.com/.default
, и для этого вам потребуется разрешение приложения в Azure AD для чтения всех пользователей через API MS Graph. (для этого найдите регистрацию своего приложения на портале Azure). Затем вы можете вызвать конечную точку/v1.0/users
Microsoft Graph API с маркером, прикрепленным к запросу. Это дает вам всех пользователей. - person juunas   schedule 04.06.2019