Я хочу получить секрет от KeyVault, но KeyVaultClient.AuthenticationCallback не вызывается.
Я создал unittest, который является MSTest, у меня есть этот код:
[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] Произошла ошибка при попытке подключиться к Key Vault. Исключение: System.Threading.ThreadAbortException: поток был прерван.
в Microsoft.Rest.RetryDelegatingHandler.d__15.MoveNext ()
--- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)
в Microsoft.Azure.KeyVault.KeyVaultCredential.d__13.MoveNext ()
--- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)
в Microsoft.Azure.KeyVault.KeyVaultClient.d__65.MoveNext ()
--- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)
в Microsoft.Azure.KeyVault.KeyVaultClientExtensions.d__13.MoveNext ()
--- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)
at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult()
at <GetSecretValueAsync>d__24.MoveNext() in
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult ()
в d__18.MoveNext () в C: \ MyProject \ src \ test \ testValidation.cs: строка 41