Я извлекаю секретные значения из хранилища ключей для своего приложения Azure Service Fabric без учета состояния и получаю 401 ошибку зависимости (если я проверяю через понимание подключенного приложения) только для 2 секретных хранилищ ключей из 100-секретных хранилищ ключей.Ниже приведен снимок экрана ошибки зависимости, отображаемой в приложении для одного из секретов хранилища ключей.
Здесь путь запроса 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;
}
Я отладил проблему дальше, и ниже дано мое обнаружение -
Исключение происходит во времяизвлечение значения конкретного keyVaultSecret.
Наряду с исключением также успешно извлекается значение секрета.
Исключение составляет: 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()