Миграция с базовой аутентификации ExchangeWebService на OAuth2.0 - PullRequest
0 голосов
/ 24 сентября 2019

Моя цель состоит в том, чтобы перенастроить наше подключение к 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()}");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...