Потребовалось немного дурачиться, но это не так уж сложно в конце концов.В 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 , и теперь я знаю, как это сделать.Это все еще оставляет намного больше вопросов, но все это в основном отвечает на мой вопрос ... Я буду использовать это как ответ, поскольку другие могли бы счесть это полезным ...