如何使用用户凭据访问Azure密钥保管库?

问题描述:

我试图编写一个简单的应用程序来使用我自己的域加入的凭据来访问Azure KeyVault。我不知道它是凭证部分还是我如何访问KeyVault,但我一直收到“无效URI:无法确定URI的格式”异常。 我能够使用Azure PowerShell cmdlet访问KeyVault,但不能使用C#。如何使用用户凭据访问Azure密钥保管库?

下面的代码,我有:

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。

+0

我不认为你有可能使用你的应用程序ID访问密钥库。我已经使用Azure PowerShell客户端ID进行了工作:'1950a258-227b-4e31-a9cf-717495945fc2'。你可以尝试用这个替换你的AAD客户端ID吗? –

+0

您可能想看看这篇文章,其中详细介绍了您正在尝试执行的操作:https://blogs.msdn.microsoft.com/kaevans/2016/10/31/using-azure-keyvault-to-商店秘密/ – nashwan

VaultName需要是KeyVault的URL,而不仅仅是Vault的名称。 例如,如果你的KeyVault的名字是TestKeyVault,那么你需要使用下面的代码 -

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

休息您的代码看起来不错。

+1

你不需要url中的443端口。这隐含了它的HTTPS。 – nashwan