Azure 功能:本地运行时 DefaultAzureCredential.GetTokenAsync 失败

pad*_*ike 4 azure azure-powershell azure-active-directory azure-functions azure-managed-identity

我在 .NET 6 上有一个以 dotnet 隔离模式运行的 C# azure 函数。此函数调用另一个 azure 函数,该函数使用 Azure AD 身份验证。为了生成令牌,我有以下代码:

    var audience = $"api://{appRegistrationClientId}";           
    var tokenCredential = new DefaultAzureCredential();
    var token = await tokenCredential.GetTokenAsync(new TokenRequestContext(new[] { $"{audience}/.default" }) { });
    var apiToken = token.Token;

    return apiToken;
Run Code Online (Sandbox Code Playgroud)

如果我将此代码部署到 Azure,则代码运行良好。我可以从其他功能应用程序调用和检索数据。但是,当在 Visual Studio 上本地运行时,出现以下异常:

由于未知错误,Azure PowerShell 身份验证失败。有关详细信息,请参阅故障排除指南。 https://aka.ms/azsdk/net/identity/powershellcredential/troubleshoot 未处理的异常。System.ArgumentException:启动挂钩程序集“Microsoft.Azure.Functions.Worker.Core”无法加载。有关详细信息,请参阅内部异常。

---> System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.Azure.Functions.Worker.Core,Culture=neutral,PublicKeyToken=null”。该系统找不到指定的文件。

文件名:“Microsoft.Azure.Functions.Worker.Core,Culture=neutral,PublicKeyToken=null”

在 System.Reflection.RuntimeAssembly.InternalLoad(ObjectHandleOnStack assemblyName、ObjectHandleOnStack requestingAssembly、StackCrawlMarkHandle stackMark、布尔 throwOnFileNotFound、ObjectHandleOnStack assemblyLoadContext、ObjectHandleOnStack retAssembly)

在 System.Reflection.RuntimeAssembly.InternalLoad(AssemblyName assemblyName、RuntimeAssembly requestingAssembly、StackCrawlMark& stackMark、布尔 throwOnFileNotFound、AssemblyLoadContext assemblyLoadContext)

在 System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyName(AssemblyName assemblyName)

在 System.StartupHookProvider.CallStartupHook(StartupHookNameOrPathstartupHook)

--- 内部异常堆栈跟踪结束 ---

在 System.StartupHookProvider.CallStartupHook(StartupHookNameOrPathstartupHook)

在 System.StartupHookProvider.ProcessStartupHooks()

我尝试通过异常消息提供的链接进行故障排除,但没有任何效果。我可以调用 Get-AzAccessToken -ResourceUrl https://management.core.windows.net并在 powershell 中生成令牌。

我还在 Azure 服务身份验证 -> 帐户选择选项下将我的 Azure 帐户添加到 Visual Studio。

有没有办法让这个调用在本地工作,或者有什么解决方法。我确实需要能够从我的开发机器调用此函数才能测试我自己的代码。

小智 10

当我收到此错误时,我必须重新启动 Visual Studio 2022 并重新输入 Azure 服务身份验证(包括 MFA)的凭据。

Visual Studio > Tools > Options > Azure Service Authentication