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

Bon*_*nz0 9 c# azure azure-keyvault

我正在尝试使用我自己的域加入凭据编写一个简单的应用程序来访问Azure KeyVault.我不知道它是凭据部分还是我如何访问KeyVault,但我不断收到"无效的URI:无法确定URI的格式"异常.我可以使用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<string> 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

可能是什么导致了这个?我已经浏览了互联网,但没有找到任何示例代码来展示如何以这种方式访问​​KeyVault.

Tho*_*mas 10

正如@ varun-puranik所说,你需要指定vaultBaseUrl而不是保险库名称.

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

您还需要安装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}}");
Run Code Online (Sandbox Code Playgroud)


小智 5

VaultName必须是KeyVault的URL,而不仅仅是Vault的名称。例如,如果您的KeyVault的名称是TestKeyVault,则需要使用以下代码-

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

您的其余代码看起来不错。