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

标签 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;
    }
}

这可能是什么原因造成的?我搜索了互联网,但没有找到任何示例代码来说明如何以这种方式访问​​ KeyVault。

最佳答案

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

有新的 nuget 包允许连接到 Azure Keyvault无需指定 Azure Active Directory 客户端 ID。
当您使用 managed identity 时,此方法有效。

您还需要安装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}}");

关于c# - 如何使用用户凭据访问 Azure Key Vault?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36896703/

相关文章:

azure - Azure Web作业功能状态为“永不结束”

azure - 如何在 Azure Functions/应用程序中的连接字符串的一部分中引用 key 保管库 secret

c# - 异步 WCF 服务和调用持续时间性能计数器

c# - 在 NInject 中实现 OnePerSessionBehavior

azure - Orchard Azure 网站错误

Azure AKS 通过 VPN 与数据中心的连接

key - Hashicorp Vault 与 Azure Key Vault

c# - EnvelopedCms 解密不适用于 Azure Key Vault

C#:你会将字符串转换/翻译功能放在哪里?

c# - 边框内的按钮