2017-02-28 72 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包括两个视频教程,帮助你更好地理解。