使用个人帐户时,EWS OAuth身份验证中的给定令牌无效

edqdpe6u  于 2022-10-08  发布在  其他
关注(0)|答案(1)|浏览(216)

我必须从任何帐户从Exchange服务器获得联系人,所以我们使用了以下链接的代码。

https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

但它不适用于个人帐户,而个人帐户适用于我们的组织帐户。因此,我使用了AadAuthorityAudience属性而不是TenantID,并将作用域从EWS.AccessAsUser.All更改为Other。现在身份验证已成功,但在ExchangeService中使用令牌时出现“给定令牌无效”错误。

var pcaOptions = new PublicClientApplicationOptions {
    ClientId = "77xxxxxxxxxxx92324",
    //TenantId = "7887xxxxxxxxxxxxx14",
    RedirectUri = "https://login.live.com/oauth20_desktop.srf",
    AadAuthorityAudience = AadAuthorityAudience.AzureAdAndPersonalMicrosoftAccount};

var pca = PublicClientApplicationBuilder.CreateWithApplicationOptions(pcaOptions).Build();

//var ewsScopes = new string[] { "https://outlook.office365.com/EWS.AccessAsUser.All" };
var ewsScopes = new string[] { "User.Read", "Contacts.ReadWrite.Shared" };

var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();

var ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
//ewsClient.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "araj@concord.net");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);

// Make an EWS call
var folders = ewsClient.FindFolders(WellKnownFolderName.MsgFolderRoot, new FolderView(10));

我在这里做错了什么?

xdnvmnnf

xdnvmnnf1#

https://outlook.office365.com/EWS.AccessAsUser.All是正确的作用域。该作用域对个人帐户无效,因为它们不受EWS支持。

相关问题