MSAL Oauth EWS身份验证-AcquireTokenForClient强制Visual Studio跳过并结束



我正在尝试为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)

相关内容

最新更新