В рабочей среде я использую статические значения конфигурации, загружаемые при запуске. (например, 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 (например, конфигурации приложений) для оптимизации этого подхода?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ironment-i