Моя цель состоит в том, чтобы перенастроить наше подключение к Exchange для использования OAuth2.0, чтобы мы могли покрыть удаление базовой аутентификации в 2020 году.
Мой текущий код с использованием базовой аутентификации:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials(MailBox, Password, "domamer");
try
{
service.AutodiscoverUrl(MailBox, RedirectionUrlValidationCallback);
}
catch
{
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
}
Просмотр документации, предоставленной Microsoft Здесь: ( ссылка ) Я кодировал следующее, ожидая, что это заменит вышеперечисленное.
var pcaOptions = new PublicClientApplicationOptions
{
ClientId = AppSettings.GetOauthClientID(),
TenantId = AppSettings.GetOauthTenantID()
};
var pca = PublicClientApplicationBuilder.CreateWithApplicationOptions(pcaOptions).Build();
// The permission scope required for EWS access
var ewsScopes = new string[] { "https://outlook.office.com/EWS.AccessAsUser.All" };
// Make the interactive token request
var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
// Configure the ExchangeService with the access token
var ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
ewsClient.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, MailBox);
Я подумал, что «ewsClient» в моем новомкод будет эквивалентен «service» в моем исходном коде.
Когда я пытаюсь пройтись по моему проекту, он просто заканчивается на этой строке:
var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
Я дважды проверилмой ClientID, TenantID верны.
Кто-нибудь имел эту проблему раньше?Возможные решения или вещи для проверки?
Я пытался использовать Try / Catch в надежде получить сообщение об ошибке, но я никогда не достигал точек останова, которые я установил на всех Console.WriteLine.Он просто блокируется и перестает отвечать на строку ExecuteAsync ()
try
{
// Make the interactive token request
var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
// Configure the ExchangeService with the access token
var ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
ewsClient.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, EmailBox);
Console.WriteLine("Made it Here");
}
catch (MsalException ex)
{
Console.WriteLine($"Error acquiring access token: {ex.ToString()}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.ToString()}");
}