Сегодня у нас есть приложение для синхронизации 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();
Мои вопросы:
- Это «правильный» подход для меня, или я что-то упустил?
- Будет ли текущая аутентификация работать на локальных серверах (после 13 октября 2020 года)?
- Работает ли аутентификация OAuth для Exchange 2010?
- Если так, как наши клиенты получают tentantId (я знаю, где его найти для o365).
- Что такое TTL для токена?
Любая помощь / предложения с благодарностью.