KeyVaultClient.AuthenticationCallback Delegate的参数来自哪里?

时间:2017-02-28 10:38:32

标签: c# asp.net-mvc azure active-directory azure-keyvault

我正在尝试拨打订阅中的所有保险库。我正在使用的方法就是这个 -

控制器

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)

但我从哪里获得权威,资源和范围? 谢谢!

1 个答案:

答案 0 :(得分:0)

AuthenticationCallback是一个委托函数,权限/资源/范围的值由SDK提供,我们需要提供委托函数来使用这些值来获取访问令牌。

如果您使用的是Web应用程序,则代码将无法运行,因为您需要在誓言过程中提供client_secret或client_assertion。如果您调试应用程序,您会发现GetToken函数不会触发,因为您不使用该客户端来执行查询(或其他操作)。有关如何从Web应用程序使用Azure Key Vault的信息,请参阅以下链接:

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

请同时点击here,其中包含两个视频教程,可帮助您更好地理解。