如何使用用户凭据访问Azure Key Vault?

我正在尝试使用我自己的域加入凭据编写一个简单的应用程序来访问Azure KeyVault。 我不知道它是凭证部分还是我如何访问KeyVault,但我不断得到“无效的URI:无法确定URI的格式”exception。 我可以使用Azure PowerShell cmdlet访问KeyVault,但不能使用C#。

这是我的代码:

class Program { const string ClientId = "MY AAD CLIENT ID"; static void Main(string[] args) { Console.WriteLine("Hello, KeyVault!"); var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken)); var secret = client.GetSecretAsync("vaultName", "secretName").Result; // Throws Invalid URI: The format of the URI could not be determined Console.WriteLine(secret.Value); Console.ReadLine(); } private static async Task GetAccessToken(string authority, string resource, string scope) { var context = new AuthenticationContext(authority, TokenCache.DefaultShared); var authResult = await context.AcquireTokenAsync(resource, ClientId, new UserCredential()); return authResult.AccessToken; } } 

可能是什么导致了这个? 我已经搜索过互联网,但没有发现任何示例代码显示如何以这种方式访问​​KeyVault。

VaultName需要是KeyVault的URL,而不仅仅是Vault的名称。 例如,如果KeyVault的名称是TestKeyVault,那么您需要使用以下代码 –

 var secret = client.GetSecretAsync("https://testkeyvault.vault.azure.net:443", "secretName").Result; 

其余的代码看起来很好。

正如@ varun-puranik所说,您需要指定vaultBaseUrl而不是Vault名称。

有一个新的nuget包允许连接到Azure Keyvault而不指定Azure Active Directory客户端ID。

  • Microsoft.Azure.Services.AppAuthentication

您还需要安装Microsoft.Azure.KeyVault nuget包。

 using Microsoft.Azure.KeyVault; using Microsoft.Azure.Services.AppAuthentication; ... var azureServiceTokenProvider = new AzureServiceTokenProvider(); var keyVaultClient = new KeyVaultClient( new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)); var secret = await keyVaultClient.GetSecretAsync( "https://{{my-vault-name}}.vault.azure.net/", "{{my-secret}}");