Аутентификация EWS: учетные данные учетной записи службы OAuth - PullRequest
0 голосов
/ 20 марта 2020

Сегодня у нас есть приложение для синхронизации c встреч с Exchange. У нас есть несколько клиентов, использующих разные версии Exchange, а именно: Exchange 2010, o365. Каждый клиент создал учетную запись с правами на олицетворение, которые мы используем для аутентификации Пример:

var credentials = new WebCredentials(serviceAccount.username, serviceAccount.password);
var service = new ExchangeService
{
   Credentials = credentials,
   Url = new Uri(exchangeUri)
}
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);

Таким образом, этот метод больше не будет работать с 13 октября 2020 года, и вместо этого нам придется использовать OAuth. Я прочитал документацию MS «Аутентификация приложения EWS с помощью OAuth»: https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

Я зарегистрировал свое приложение в Azure AD и получил идентификатор приложения. Я предполагаю, что я должен использовать «Права доступа к приложению» и следующий код для получения токена:

// Configure the MSAL client to get tokens
var app = ConfidentialClientApplicationBuilder
    .Create(ConfigurationManager.AppSettings["appId"])
    .WithAuthority(AzureCloudInstance.AzurePublic, ConfigurationManager.AppSettings["tenantId"])
    .WithClientSecret(ConfigurationManager.AppSettings["clientSecret"]).Build();

// The permission scope required for EWS access
var ewsScopes = new string[] { "https://outlook.office.com/.default" };

//Make the toekn request
AuthenticationResult authResult = await app.AcquireTokenForClient(ewsScopes).ExecuteAsync();

Мои вопросы:

  1. Это «правильный» подход для меня, или я что-то упустил?
  2. Будет ли текущая аутентификация работать на локальных серверах (после 13 октября 2020 года)?
  3. Работает ли аутентификация OAuth для Exchange 2010?
  4. Если так, как наши клиенты получают tentantId (я знаю, где его найти для o365).
  5. Что такое TTL для токена?

Любая помощь / предложения с благодарностью.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Для вашего 4-го вопроса: вы можете настроить azure время жизни токена и продлить его максимум до 24 часов. Ссылка

0 голосов
/ 23 марта 2020
  1. Да, единственное, чего не хватает, это заголовок X-MailboxAnchor (вы должны делать это также с Basi c Auth)
  2. Да На OnPrem не влияют вносимые изменения в Office365
  3. Нет, OAuth будет работать только с OnPrem для тех, кто настроил гибридную современную аутентификацию, см. https://docs.microsoft.com/en-us/office365/enterprise/hybrid-modern-auth-overview (с Exchange существуют определенные требования к CU на 2013 и 2016 годы). Я также рекомендую вам прочитать https://practical365.com/exchange-server/configure-hybrid-modern-authentication-for-exchange-server/
  4. TTL для токена доступа составляет 60 минут, если ваше приложение будет использовать токен в течение длительного периода времени, что является одной из слабых сторон Управляемый API EWS состоит в том, что у него нет обратного вызова / события, в котором вы можете проверить срок действия токена, когда он делает запрос к серверу. Поэтому вам нужно учитывать это в своем коде logi c, либо добавив свою собственную проверку перед любыми вызовами службы, либо посмотрите на изменение исходного кода github и добавьте свои собственные logi c в базовый код.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...