2017-02-28 69 views
1

我正在嘗試撥打預訂中的所有保管庫。我使用的方法是這樣的 -KeyVaultClient.AuthenticationCallback委託的參數來自哪裏?

控制器

var myClient = new Microsoft.Azure.KeyVault.KeyVaultClient(new KeyVaultClient.AuthenticationCallback(Helper.GetToken)); 
Microsoft.Azure.KeyVault.KeyVaultCredential test = new KeyVaultCredential(new KeyVaultClient.AuthenticationCallback(Helper.GetToken)); 

TokenCloudCredentials tokenCredentials = new TokenCloudCredentials("xxx", test.Token); 

KeyVaultManagementClient client = new KeyVaultManagementClient(tokenCredentials); 
VaultListResponse response = new VaultListResponse(); 

助手

public static async Task<string> GetToken(string authority, string resource, string scope) 
{ 

    var clientId = ConfigurationManager.AppSettings["AuthClientId"]; 
    var clientRedirectURI = ConfigurationManager.AppSettings["AuthClientRedirectURI"]; 

    var context = new AuthenticationContext(authority, TokenCache.DefaultShared); 

    result = await context.AcquireTokenAsync(resource, clientId, new Uri(clientRedirectURI), new PlatformParameters(PromptBehavior.Always)); 
return result.AccessToken; 
} 

對於我的控制器「test.Token」始終返回null,但我不能不認爲這可能從我身上不傳任何東西到Helper.Token中進行測試。我知道Helper.Token基本上匹配回撥想要的內容:

public delegate Task<string> AuthenticationCallback(
string authority, 
string resource, 
string scope) 

但是我從哪裏獲得權限,資源和範圍? 謝謝!

+0

在你的控制器方法上放置一個斷點並檢查調試器,看看它是否被正確設置 –

+0

對不起,但我不確定你是什麼意思。我彈出了斷點,但只要我跳過「Microsoft.Azure.KeyVault.KeyVaultCredential test = new KeyVaultCredential(new KeyVaultClient.AuthenticationCallback(Helper.GetToken));」然後它轉到下一行(TokenCredientials) - 我檢查測試並將標記設置爲空。 – Pikapops

回答

0

AuthenticationCallback是一個委託函數,其權限/資源/範圍的值由SDK提供,我們需要提供委託函數來使用這些值來獲取訪問令牌。

如果您使用的是Web應用程序,那麼您的代碼將無法工作,因爲您需要在宣誓過程中提供client_secret或client_assertion。如果您調試應用程序,您會發現GetToken函數不會觸發,因爲您不使用該客戶端來執行查詢(或其他操作)。請參考以下鏈接瞭解如何從Web應用程序使用Azure的主要跳馬:

https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application

請點擊也是其中here包括兩個視頻教程,幫助你更好地理解。