我正在尝试为EWS设置仅限应用程序的OAuth身份验证,以访问O365,遵循以下说明:https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth#add-获取身份验证令牌的代码
该项目将是一个Windows服务(C#.NET 6控制台应用程序(,但现在我正在调试模式(Visual Studio 2022(中浏览每一行,观看控制台。
var app = ConfidentialClientApplicationBuilder
.Create(clientID)
.WithTenantId(tenantID)
.Build();
var ewsScopes = new string[] { "https://outlook.office365.com/.default" };
var authResult = await app.AcquireTokenForClient(ewsScopes).ExecuteAsync();
我这样运行它,但我得到了一个错误,说我需要传递一个凭据,比如cert或clientSecret我强调的一点是,它实际运行,似乎与服务器通信,并返回一条错误消息
因此,我从Azure门户获得了一个秘密值,并像这样再次运行:
Console.WriteLine("FIRST WRITELINE");
var app = ConfidentialClientApplicationBuilder
.Create(clientID)
.WithClientSecret(mySecret)
.WithTenantId(tenantID)
.Build();
var ewsScopes = new string[] { "https://outlook.office365.com/.default" };
var authResult = await app.AcquireTokenForClient(ewsScopes).ExecuteAsync();
Console.WriteLine("SECOND WRITELINE");
当我运行上面的代码时,即使是一行一行地执行,只要它试图处理"AcquireTokenForClient((。ExecuteAsync(("它立即跳出这个类,回到调用它的方法。它完全没有输出,就像崩溃了一样。它从未达到";第二条写入线";,即使我在它上面有一个断点。它在一个try块内,但它跳过了catch并完全跳出了这个类。
我在Visual Studio 2019和2022中都尝试过,结果相同。重启了我的机器等;WithDebugLoggingCallback(("在链条中,没有任何区别。
我不知道这是Visual Studio的错误,还是该方法的问题。有人看到这样的事情并解决了吗?
我认为您需要对异步任务调用Result并删除等待。它应该是这样的:
var authResult = app.AcquireTokenForClient(ewsScopes).ExecuteAsync().Result;
看看你的"主";方法签名,并确保它不是:
async static void Main(string[] args)
正确主方法应返回任务:
async static Task Main(string[] args)