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

时间:2018-07-02 13:49:57

标签: .net azure azure-keyvault

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

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

  

对COM组件的调用已返回错误HRESULT E_FAIL。

它是用这种方法抛出的:

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

还有其他方法可以从本机应用程序访问我的Key Vault吗?
由于我没有ClientSecretID,因此“通过Web应用程序访问Key Vault表单”等教程对我不起作用。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

对COM组件的调用已返回错误HRESULT E_FAIL

在您的情况下,需要提示界面输入用户名和密码才能获得信用。

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

正如rickvdbosch提到的那样,您可以注册一个Azure AD WebApp来获取clientId和secretkey。有关更多信息,请参阅此toturial。以下是演示代码如何访问密钥库。

  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来做到这一点。您还可以从此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));