c # Класс конфигурации и KeyVault - PullRequest
0 голосов
/ 21 февраля 2019

Мне просто нужно это разъяснение для меня, может быть, у кого-то была похожая ситуация, и он нашел достойное решение.В настоящее время мы храним все наши конфиденциальные данные в ApplicationSettings , что не очень хорошо.А из настроек приложения мы используем Autofac для создания одноэлементного Configuration класса, который затем внедряется в любой класс, требующий каких-либо настроек.

Это то, чтоВ настоящее время класс выглядит так:

public class CormarConfig : ICormarConfig
{
    public bool Live => ConfigurationManager.AppSettings["Server"].ToUpper().Equals("LIVE");
    public string SqlConnectionString => ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
    public string OracleConnectionString => ConfigurationManager.ConnectionStrings["OracleConnection"].ToString();

    public connectionType ConnectionType => Live ? connectionType.Live : connectionType.Test;
    public string CollectionManagerEndpoint => ConfigurationManager.AppSettings["CollectionManagerEndpoint"];
    public string TradePortalUrl => ConfigurationManager.AppSettings["TradePortalUrl"];
    public string TroposDb => ConfigurationManager.AppSettings["TroposDatabase" ];
    public string WmsBaseEndpoint => ConfigurationManager.AppSettings["WmsBaseEndpoint"];

    /// ------- Removed from brevity ------- ///

}

Итак, теперь мы перенесли многие из этих чувствительных настроек в Azure Key Vault , что хорошо.Затем я создал простой класс для извлечения этих «секретов», таких как:

public class SecretProvider : ISecretProvider
{
    private readonly KeyVaultClient _keyVaultClient;
    private readonly ISecretConfig _config;

    public SecretProvider(ISecretConfig config)
    {
        var azureServiceTokenProvider = new AzureServiceTokenProvider();
        _keyVaultClient = new KeyVaultClient(
            new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
        _config = config;
    } 

    public async Task<string> GetAsync(string name)
    {
        var secret = await _keyVaultClient.GetSecretAsync($"{_config.KeyVaultEndPoint}/secrets/{name}");
        return secret.Value;
    }
}

Я проверил это, и он отлично работает.Проблема в том, что мне нужно заменить некоторые из Свойства в моем CormarConfig классе.

Например, я хотел бы сделать что-то вроде:

private readonly ISecretProvider _secretProvider;
public CormarConfig(ISecretProvider secretProvider) => _secretProvider = secretProvider;

private string _sqlConnectionString;
public async Task<string> GetSqlConnectionString()
{
    if (!string.IsNullOrEmpty(_sqlConnectionString)) return _sqlConnectionString;
    _sqlConnectionString = await _secretProvider.GetAsync("DefaultConnection");
    return _sqlConnectionString;
}

Будет ли это приемлемым решением?

1 Ответ

0 голосов
/ 22 февраля 2019

Будет ли это приемлемым решением?

Да.Тем не менее, CormarConfig, который вы указали, является классом, возможно, какой-то метод является вашим кратким.Итак, я предлагаю вам добавить конструктор CormarConfig в класс CormarConfig, как показано ниже:

public CormarConfig(ISecretProvider secretProvider) => _secretProvider = secretProvider;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...