Azure:从应用服务访问 Key Vault 时,如何解决“策略要求调用方‘...’使用代表 (OBO) 流”?

uri*_*rig 5 azure azure-keyvault azure-appservice

我有一个在 Azure 应用服务中运行的 ASP.net Core 3.1 应用程序。开始使用 Azure Key Vault 存储应用程序的连接字符串和其他机密后,该应用程序现在崩溃并显示“HTTP 错误 500.30 ANCM 进程内启动失败”错误页面。

我上下搜索了 Azure 门户,最后设法在应用服务的 .NET Core 启动失败列表中找到了一些有意义的东西(隐藏在应用服务 > 诊断和解决问题 > Web 应用程序关闭 > 查看 .NET 启动失败下):

Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: The policy requires the caller 
'appid=<redacted>;oid=<redacted>;iss=https://sts.windows.net/<readacted>/' to use on-behalf-of (OBO) 
flow. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287
Run Code Online (Sandbox Code Playgroud)

我不需要代表流量。我最初确实定义了 Key Vault 访问策略,以错误地包含应用程序oid及其应用程序appid。从那以后,我通过删除访问策略并在没有appid.

我的问题是 -为什么我仍然收到此错误,我该如何解决?

更新:下面是似乎触发这个的代码。禁用它后,应用程序会恢复正常(尽管没有 Key Vault 集成)。

    var builtConfig = config.Build();
    var vaultUrl = $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/";
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(
        new KeyVaultClient.AuthenticationCallback(
            azureServiceTokenProvider.KeyVaultTokenCallback));
    config.AddAzureKeyVault(
        vaultUrl,
        keyVaultClient,
            new DefaultKeyVaultSecretManager());
Run Code Online (Sandbox Code Playgroud)

Joe*_*Cai 6

添加访问策略时,它只能选择具有对象 ID 的服务主体。

在此处输入图片说明

正如您所描述的,您删除appid并确保单击save按钮来保存您的操作。

在此处输入图片说明

您可以通过为 Key Vault 设置 Key Vault 访问策略来授予数据平面访问权限。若要设置这些访问策略,用户、组或应用程序必须具有该密钥保管库管理平面的参与者权限

更多细节,你可以参考这篇文章

  • 更正:删除同时具有“oid”和“appid”的访问策略并将其替换为仅指定“oid”的访问策略修复了问题。我错误地认为它没有,因为另一个问题也导致了 500.30,并且我对门户中的 .Net Core 启动失败中仍然显示的旧错误消息感到困惑。 (3认同)