Ошибки аутентификации Azure Key Vault 401 - PullRequest
0 голосов
/ 08 октября 2018

Я извлекаю секретные значения из хранилища ключей для своего приложения Azure Service Fabric без учета состояния и получаю 401 ошибку зависимости (если я проверяю через понимание подключенного приложения) только для 2 секретных хранилищ ключей из 100-секретных хранилищ ключей.Ниже приведен снимок экрана ошибки зависимости, отображаемой в приложении для одного из секретов хранилища ключей.

image

Здесь путь запроса https://mykeyvaultname.vault.azure.net:443/secrets/PushMessagingSecretsTopicName/?api-version=7.0

Мой кодчтобы получить секрет хранилища ключей, приведено ниже -

    public async Task<string> GetSecretAsync(string secretName, string clientId, string appKey, string vaultAddress)
            {
                string secretValue = string.Empty;
                if (string.IsNullOrEmpty(secretName))
                    throw new ArgumentNullException(nameof(secretName));

                if (string.IsNullOrEmpty(clientId))
                    throw new ArgumentNullException(nameof(clientId));

                if (string.IsNullOrEmpty(appKey))
                    throw new ArgumentNullException(nameof(appKey));

                if (string.IsNullOrEmpty(vaultAddress))
                    throw new ArgumentNullException(nameof(vaultAddress));

                var secretIdentifier = vaultAddress + "secrets/" + secretName;
                string cacheKey = secretIdentifier + clientId + appKey;

                secretValue = await GetSecretValue(clientId, appKey, secretIdentifier, cacheKey);

                return secretValue;
            }

private async Task<string> GetSecretValue(string clientId, string appKey, string secretIdentifier, string cacheKey)
        {
            IAdAuthentication authToken = new AdAuthentication
            {
                ClientId = clientId,
                AppKey = appKey
            };
            KeyVaultClient keyVaultClient = new KeyVaultClient(authToken.GetAuthenticationTokenAsync);

            // Get secret from the KeyVault.

            SecretBundle secret = null;

            Task tskGetSecret = Task.Run(async () =>
            {
                        //Here I am getting exception with response
                        secret = await keyVaultClient.GetSecretAsync(secretIdentifier).ConfigureAwait(false);
            });
            await Task.WhenAny(tskGetSecret);

            if (tskGetSecret.IsFaulted || tskGetSecret.IsCanceled)
            {
                secret = null;
            }

            string secretValue = string.Empty;
            if (secret != null && secret.Value != null)
            {
                secretValue = secret.Value.Trim();
            }

            return secretValue;
        }

Я отладил проблему дальше, и ниже дано мое обнаружение -

  1. Исключение происходит во времяизвлечение значения конкретного keyVaultSecret.

  2. Наряду с исключением также успешно извлекается значение секрета.

  3. Исключение составляет: Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException: 'Response status code indicates server error: 401 (Unauthorized).'

StackTrace: -

at Microsoft.Rest.RetryDelegatingHandler.<>c__DisplayClass11_0.<<SendAsync>b__1>d.MoveNext()

1 Ответ

0 голосов
/ 24 октября 2018

Я закрываю эту проблему, так как при дальнейшей отладке я обнаружил, что проблема не является прерывистой и не связана с конкретными секретами хранилища ключей.Проблема всегда возникает при получении значения первого секретного ключа хранилища для приложения.Я закрываю этот выпуск и открыл новый выпуск с соответствующими подробностями.

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