Самый простой способ найти электронную почту с помощью Microsoft Graph

У меня есть проект автоматизации (.NET Framework), который в настоящее время использует Microsoft.Exchange.WebServices для простого выполнения простых задач, таких как поиск электронной почты в удаленном почтовом ящике или папке, проверка вложений и т. Д. Мы получаем данные из учетной записи электронной почты организации по адресу: outlook.office365.com

Недавно я начал переписывать свой проект на .NET Core, и это вызвало ряд проблем, включая мое постоянное использование EWS:

Сегодня мы делимся своими планами по отказу от доступа с базовой аутентификацией для EWS в течение следующих двух лет с окончанием поддержки октября. 13 августа 2020 г..

https://techcommunity.microsoft.com/t5/exchange-team-blog/upcoming-changes-to-exchange-web-services-ews-api-for-office-365/ba-p/608055

Microsoft Graph - это рекомендуемый API для доступа к данным Exchange Online. Новые приложения, предназначенные для доступа к данным Exchange Online, должны использовать Microsoft Graph.

EWS поддержка также кажется низкой в ​​рамках .NET Core различных предупреждений, появляющихся в проекте после установки.

Вся моя текущая работа с EWS выполняется в классе с парой переменных среды, передаваемых для настройки WebCredentials и т. Д., Но поскольку я прочитал ряд статей Microsoft (включая: Получить доступ без пользователя) Я понял, что больше ничего не будет просто :) об использовании Graph у меня есть не нашел прямых примеров кода, как реализовать эту чисто внутреннюю интеграцию в почтовый ящик самым простым способом.

Мне интересно, может ли кто-нибудь дать мне простой и подходящий пример аутентификации и авторизации, относящийся к внутренней интеграции? то есть, без согласия администратора всплывающие окна или любые другие всплывающие окна, которые не подходят для такой интеграции, возможно ли это?


person BernardV    schedule 17.01.2020    source источник
comment
Это полезно? Setup Graph Managed API Я написал это, когда переводил часть своей работы с EWS.   -  person Ivan Franjic    schedule 17.01.2020
comment
Спасибо за ссылку @IvanFranjic, все занят просмотром.   -  person BernardV    schedule 20.01.2020
comment
@IvanFranjic, не могли бы вы помочь мне понять, в вашем примере мы просто устанавливаем exchangeServiceContext["[email protected]"], в какой момент будет предоставлен пароль этого почтового ящика? Конечно, регистрация и аутентификация вашего графического приложения не должны давать вам режим бога в любом почтовом ящике вашей компании лазурного цвета? Неужели вам все еще нужно предоставить пароли для отдельных почтовых ящиков?   -  person BernardV    schedule 20.01.2020
comment
После настройки провайдера аутентификации, как описано в github wiki, вы получите нечто похожее на олицетворение приложения с Ews, и вам не нужно будет указывать имя пользователя и пароль. Это даст вам доступ к области (почтовые ящики и гранты), которую вы указали при регистрации настроек приложения в лазурном. Вы по-прежнему можете настроить IAuthorizationProvider с различными типами авторизации, если это не соответствует вашим потребностям.   -  person Ivan Franjic    schedule 20.01.2020


Ответы (1)


Вот пример консоли net core 2.1

Есть Делегированные разрешения и Разрешения для приложений. Делегирование - это всплывающее окно, для которого требуется пользователь, приложение выполняется через субъект-службу (и может выполняться не интерактивно / в автоматическом режиме).

Шаг 2 в приведенном выше примере использует разрешение User.Read.All. Это дает вам адрес электронной почты, а также массу другой информации о ваших пользователях. Если вам просто нужна электронная почта, это слишком много. User.ReadBasic.All - гораздо лучшее разрешение для регистрации приложения для ваших целей (пример должен работать нормально, если вы измените разрешения на User.ReadBasic.All)

В последней части примера (вставленной ниже) вы захотите изменить запрос и, скорее всего, захотите добавить итератор.

GraphServiceClient graphClient = GetAuthenticatedGraphClient(config);
List<QueryOption> options = new List<QueryOption>
{
    new QueryOption("$top", "1")
};

var graphResult = graphClient.Users.Request(options).GetAsync().Result;
Console.WriteLine("Graph SDK Result");
Console.WriteLine(graphResult[0].DisplayName);

Graph и MSAL сначала могут показаться сложными, но они очень полезны. Microsoft регулярно добавляет функциональные возможности (и функции) для построения графиков. График 1.0 Документы

person Chad Carlton    schedule 17.01.2020
comment
Спасибо @ChadCarlton за ваш вклад! Я проработаю ваш отзыв и сообщу, как только смогу. - person BernardV; 19.01.2020
comment
Я хотел бы добавить, что есть и другие способы получить эти данные. Powershell также можно легко использовать. - person Chad Carlton; 20.01.2020