单元测试项目在实例 IPublicClientApplication 的 AcquireTokenInteractive 方法上崩溃

Posted

技术标签:

【中文标题】单元测试项目在实例 IPublicClientApplication 的 AcquireTokenInteractive 方法上崩溃【英文标题】:Unit Test project crashes on method AcquireTokenInteractive for instance IPublicClientApplication 【发布时间】:2022-01-09 21:09:46 【问题描述】:

我正在将一个单元测试项目从 netcore3.0 迁移到 net6.0。在 Visual Studio 中调试时,我在调用 IPublicClientApplication 实例的 AcquireTokenInteractive 方法时遇到了问题。

这是截取的代码:

IPublicClientApplication PublicClientApp = PublicClientApplicationBuilder.Create(azureADAppSettings.ApplicationID)
            .WithTenantId(azureADAppSettings.TenantID)
            .WithAuthority(AzureCloudInstance.AzurePublic, tenantName)
            .WithRedirectUri(redirectUri)
            .Build();

result = await PublicClientApp.AcquireTokenInteractive(scopes).ExecuteAsync();

方法开始执行,登录页面在浏览器中打开,我登录并在浏览器中收到此消息:

身份验证完成。您可以返回应用程序。随意 关闭此浏览器选项卡。

消息在浏览器中显示后,Visual Studio 不返回AcquireTokenInteractive 方法,Visual Studio 停止调试,错误列表中没有错误消息。在输出中我发现了两个异常。

第一个是:Exception throw: 'Azure.RequestFailedException' in System.Private.CoreLib.dll

第二个错误是:Exception throw: 'Microsoft.Identity.Client.MsalServiceException' in System.Private.CoreLib.dll

我已根据第二条错误消息对我在门户 Azure 中的应用注册进行了一些更改。我将缺少的重定向 uri 添加到应用注册并将应用设置为公共客户端类型。

在我在门户 Azure 上的应用注册中进行更改后,第二个错误仍然存​​在。

有人知道我可以采取哪些措施来解决错误消息并接收令牌吗?

【问题讨论】:

你可以在 GitHub 上打开一个问题:microsoft-authentication-library-for-dotnet 我按照你的建议做了。 【参考方案1】:

错误是Exception thrown: 'Microsoft.Identity.Client.MsalServiceException' in System.Private.CoreLib.dll

谢谢chigivigi。根据下面的 GitHub 评论,您的问题已解决。在此处发布作为答案,以帮助可能面临类似问题的其他社区成员。

问题是 redirectUri 没有添加为本机 url,而是添加为 web URL。

可以参考GitHub issue:Unit Test project crashes on method AcquireTokenInteractive for instance IPublicClientApplication

【讨论】:

【参考方案2】:

问题是 redirectUri 没有添加为本机 url,而是添加为 web URL。

【讨论】:

以上是关于单元测试项目在实例 IPublicClientApplication 的 AcquireTokenInteractive 方法上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity 游戏引擎平台上的单元测试中实例化 MonoBehaviour 对象

Junit 测试集(打包测试)实例

SpringBoot-单元测试

使用junit进行集成spring项目的单元测试

使用junit进行集成spring项目的单元测试

单元测试与 Spring 的集成测试