从本机应用程序访问 Azure Key Vault

Accessing Azure Key Vault from Native Application

我有一个 .Net 应用程序发布到 Azure Web 应用服务(本机应用程序) 我想从那里访问我的 Azure Key Vault。 我已经试过了:Accessing Key Vault from Native App

但它仅在 运行 本地应用程序时有效,而在 Azure Web 应用服务中 运行 时失败,我收到此错误:

Error HRESULT E_FAIL has been returned from a call to a COM component.

并在这个方法中抛出:

await context.AcquireTokenAsync("https://vault.azure.net", 
                                ClientId, 
                                new Uri(ClientRedirectURI), 
                                new PlatformParameters(PromptBehavior.Auto));

还有其他方法可以从本机应用程序访问我的 Key Vault 吗?
"Accesss Key Vault form a Web App" 之类的教程对我不起作用,因为我没有 ClientSecretID。

谢谢!

Error HRESULT E_FAIL has been returned from a call to a COM component

你的情况需要提示界面输入用户名和密码才能获得积分。

但是 WebApp 是 sandbox。沙箱阻止访问所有进程外 COM 服务器。

正如 rickvdbosch 提到的,您可以注册一个 Azure AD WebApp 来获取 clientId 和密钥。更多信息请参考这篇toturial。下面是访问keyvault的demo代码

  public static async Task<string> GetAccessToken(string tenantId,string appId,string secretKey)
    {

        var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
        ClientCredential clientCredential = new ClientCredential(appId, secretKey);
        var tokenResponse =await context.AcquireTokenAsync("https://vault.azure.net", clientCredential); //KeyVault resource : https://vault.azure.net
        var accessToken = tokenResponse.AccessToken;
        return accessToken;
    }

    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken));

我们也可以使用 Azure Web MSI function to do that. You also could get how to access keyvault code from this toturial

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));