C# KeyVaultClient.AuthenticationCallback未激发
我想从KeyVault获取机密,但未调用KeyVault Client.AuthenticationCallback 我创建了unittest,即MSTest,我有以下代码:C# KeyVaultClient.AuthenticationCallback未激发,c#,azure,unit-testing,mstest,azure-keyvault,C#,Azure,Unit Testing,Mstest,Azure Keyvault,我想从KeyVault获取机密,但未调用KeyVault Client.AuthenticationCallback 我创建了unittest,即MSTest,我有以下代码: [TestInitialize] public void SetupTest() { CreateKeyvalut(); } public async void CreateKeyvalut() { try {
[TestInitialize]
public void SetupTest()
{
CreateKeyvalut();
}
public async void CreateKeyvalut()
{
try
{
IKeyVaultClient keyVaultClient = GetKeyVaultClient(_clientId, _certificateThumbprint);
var password = await GetSecretValueAsync(_secretIdentifier, keyVaultClient);
}
catch (Exception ex)
{
string errorMessage = $"[KeyVault] Error occurred when trying to connect Key Vault. Exception: {ex}";
Trace.TraceWarning(errorMessage);
throw;
}
}
public static IKeyVaultClient GetKeyVaultClient(string clientId, string certificateThumbprint) {
return new KeyVaultClient(AuthenticationCallback(clientId, certificateThumbprint));
}
public static KeyVaultClient.AuthenticationCallback AuthenticationCallback(string clientId, string certificateThumbprint)
{
return async (authority, resource, scope) =>
{
X509Certificate2 certificate = GetCertificate(certificateThumbprint);
var context = new AuthenticationContext(authority);
var clientCredentials = new ClientAssertionCertificate(clientId, certificate);
AuthenticationResult result = await context.AcquireTokenAsync(resource, clientCredentials).ConfigureAwait(false);
return result.AccessToken;
};
}
public static async Task<string> GetSecretValueAsync(string secretIdentifier, IKeyVaultClient keyVaultClient)
{
var secretTask = await keyVaultClient.GetSecretAsync(secretIdentifier);
return secretTask.Value;
}
但它永远不会进入KeyVaultClient.AuthenticationCallback AuthenticationCallback中的代码
有什么问题?
我得到的例外是:
线程0x492c已退出,代码为0 0x0。
testhost.exe警告:0:[KeyVault]尝试连接密钥库时出错。异常:System.Threading.ThreadAbortException:正在中止线程。
在Microsoft.Rest.RetryDelegatingHandler.d_u15.MoveNext
-来自引发异常的上一个位置的堆栈结束跟踪--
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中
在Microsoft.Azure.KeyVault.KeyVaultCredential.d_u13.MoveNext
-来自引发异常的上一个位置的堆栈结束跟踪--
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中
在Microsoft.Azure.KeyVault.KeyVaultClient.d_u65.MoveNext
-来自引发异常的上一个位置的堆栈结束跟踪--
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中
在Microsoft.Azure.KeyVault.KeyVaultClientExtensions.d_u13.MoveNext
-来自引发异常的上一个位置的堆栈结束跟踪--
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中
在System.Runtime.CompilerServices.TaskWaiter1.GetResult
在d__24.下一个进来
-来自引发异常的上一个位置的堆栈结束跟踪--
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask任务中
在System.Runtime.CompilerServices.TaskWaiter1.GetResult
在C:\MyProject\src\test\testValidation.cs中的d\uu 18.MoveNext:第41行
我使用了完全相同的代码,它是在AuthenticationCallBack函数中单步执行的。请检查屏幕截图 由于凭据问题,似乎回调函数抛出错误
**at Microsoft.Azure.KeyVault.KeyVaultCredential.d__13.MoveNext()**
请检查凭据/证书并尝试调试回拨功能
希望有帮助。您可以尝试使用公共异步任务SetupTest,等待对CreateKeyvalut的调用,并将CreateKeyvalut函数的定义更改为公共异步任务CreateKeyvalut吗?这里的解释太长了,但您可以参考这篇文章来了解异步任务和异步void:对我来说,它适用于本地开发环境,在一些服务器上。即使它是以自包含的形式发布的,但在其他服务器上也会失败。