В рабочей среде я использую статические значения конфигурации, загружаемые при запуске. (например, ClientId, ClientSecret и т. д.).
На стадии подготовки мне нужно динамически получать эти секреты из Azure Key Vault на основе уникального идентификатора, переданного в запросе (например, идентификатора, такого как GLN).
Сценарий:
Производственная среда: такие секреты, как ClientId, ClientSecret и SubscriptionKey, являются статическими и загружаются из конфигурации при запуске.
Подготовочная среда: секреты необходимо динамически получать из Azure Key Vault во время выполнения на основе запроса. идентификатор.
Код: Выделить всё
public async Task GetToken(string identifier)
{
// Check if the token is cached
if (_memoryCache.TryGetValue("token", out Token cachedToken) && cachedToken != null)
{
return cachedToken;
}
Token newToken;
// Check if running in production (static secrets)
if (IsProductionEnvironment())
{
newToken = await FetchTokenAsync(
_configuration["ProdClientId"],
_configuration["ProdClientSecret"],
_configuration["ProdSubscriptionKey"]);
}
else
{
// For preproduction, fetch secrets dynamically from Key Vault
var clientId = await FetchSecretFromKeyVaultAsync($"preprod-{identifier}-clientId");
var clientSecret = await FetchSecretFromKeyVaultAsync($"preprod-{identifier}-clientSecret");
var subscriptionKey = await FetchSecretFromKeyVaultAsync($"preprod-{identifier}-subscriptionKey");
newToken = await FetchTokenAsync(clientId, clientSecret, subscriptionKey);
}
// Cache the token
_memoryCache.Set("token", newToken, new MemoryCacheEntryOptions().SetAbsoluteExpiration(newToken.ExpiresAt));
return newToken;
}
private async Task FetchSecretFromKeyVaultAsync(string secretName)
{
// Use KeyVault client to fetch secrets dynamically
KeyVaultSecret secret = await _secretClient.GetSecretAsync(secretName);
return secret.Value;
}
Является ли этот подход динамического получения секретов из Key Vault на основе идентификатора запроса лучшей практикой или существует более эффективный способ справиться с этим?
/>Как мне лучше структурировать свой код для обработки как статических секретов для рабочей среды, так и динамических секретов для предварительной подготовки без дублирования логики?
Следует ли мне рассмотреть возможность использования других служб Azure (например, конфигурации приложений) для оптимизации этого подхода?
Мы будем очень признательны за любые советы по передовому опыту динамического получения секретов из Key Vault в таком сценарии!
Подробнее здесь: https://stackoverflow.com/questions/790 ... ironment-i