我有一个发布到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表单”等教程对我不起作用。
谢谢!
答案 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));