KeyVaultClient.AuthenticationCallback не срабатывает - PullRequest
0 голосов
/ 02 июня 2019

Я хочу получить секрет от 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

1 Ответ

1 голос
/ 02 июня 2019

Я использовал точно такой же код, и он входит в функцию AuthenticationCallBack. Пожалуйста, проверьте скриншот.

enter image description here

Похоже на ошибку вызова функции обратного вызова из-за проблемы с учетными данными.

**at Microsoft.Azure.KeyVault.KeyVaultCredential.d__13.MoveNext()**

Пожалуйста, проверьте учетные данные / сертификат и попробуйте отладить функцию обратного вызова.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...