从本机应用程序访问 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));
我有一个 .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));