我正在尝试调用订阅中的所有保管库。我正在使用的方法是这样的 -
Controller
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();
helper
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;
}
对于我的 Controller “test.Token”总是返回 null,但我忍不住认为这可能是因为我在测试中没有将任何内容传递到 Helper.Token 中。我知道 Helper.Token 本质上与回调想要的内容匹配:
public delegate Task<string> AuthenticationCallback(
string authority,
string resource,
string scope)
但是我从哪里获得权限、资源和范围呢? 谢谢!
最佳答案
AuthenticationCallback是一个委托(delegate)函数,权限/资源/范围的值由SDK提供,我们需要提供委托(delegate)函数来使用这些值来获取访问 token 。
如果您使用的是网络应用程序,您的代码将无法工作,因为您需要在宣誓过程中提供 client_secret 或 client_assertion 。如果你调试你的应用程序,你会发现 GetToken 函数不会触发,因为你不使用该客户端来执行查询(或其他操作)。请参阅以下链接了解如何从 Web 应用程序使用 Azure Key Vault:
https://learn.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application
另请点击here其中包括两个视频教程,可以帮助您更好地理解。
关于c# - KeyVaultClient.AuthenticationCallback Delegate 的参数来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42506438/