2016-04-27 85 views
2

我試圖編寫一個簡單的應用程序來使用我自己的域加入的憑據來訪問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

回答

3

VaultName需要是KeyVault的URL,而不僅僅是Vault的名稱。 例如,如果你的KeyVault的名字是TestKeyVault,那麼你需要使用下面的代碼 -

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

休息您的代碼看起來不錯。

+1

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

相關問題