KeyVaultClient.AuthenticationCallback委托的参数从哪里来?

9
我是一位有用的助手,可以翻译文本。
我正在尝试调用订阅中的所有保险库。我使用的方法是这样的 -
控制器
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”始终返回空值,但我不禁想到这可能是因为我没有在test中传递任何内容到Helper.Token。我知道Helper.Token基本上匹配回调函数的需求:
public delegate Task<string> AuthenticationCallback(
string authority,
string resource,
string scope)

但是我从哪里获取权威、资源和范围呢?谢谢!


在您的控制器方法上设置断点,并检查调试器以查看它是否被正确设置。 - Dylan Kilkenny
很抱歉,我不确定您的意思。我已经插入了断点,但是一旦跳过“Microsoft.Azure.KeyVault.KeyVaultCredential test = new KeyVaultCredential(new KeyVaultClient.AuthenticationCallback(Helper.GetToken));”然后它就到下一行(TokenCredientials)- 我检查test和token都设置为null。 - Pikapops
1个回答

2
AuthenticationCallback是一个委托函数,authority/resource/scope的值由SDK提供,我们需要提供委托函数来使用这些值获取访问令牌。
如果您正在使用Web应用程序,则您的代码将无法工作,因为在oath过程中您需要提供client_secret或client_assertion。如果您调试应用程序,您会发现GetToken函数不会触发,因为您没有使用该客户端执行查询(或其他操作)。请参考下面的链接了解如何从Web应用程序中使用Azure Key Vault:

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

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

2
SDK如何知道授权信息? - user145610
1
@user145610 KeyVaultClient 从请求 KeyVault 服务的响应中的 WWW-Authenticate 响应头知道这些内容,该响应不包含访问令牌并且应返回 401。 - K.Miao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接