Рубрики
Uncategorized

Управление полномочиями

Я думаю, что мы все можем согласиться с тем, что хранение учетных данных в коде — действительно, действительно плохая идея! Мало того, что может … с меткой Azure, DevOps, CSHARP, безопасности.

Я думаю, что мы все можем согласиться с тем, что хранение учетных данных в коде — действительно, действительно плохая идея! Вы можете не только переоценить сборки, но и с Azure DevOps (или GitHub, …) Вы можете прочитать учетные данные в ясном языке. Запутывание тоже не помогает, поэтому Если я когда -нибудь увижу что -то вроде

private static string _password = @"klksndfl";

Думаю, я заплачу!

Но вопрос соответствует, как получить доступ к другим системам с учетными данными, не имея их в коде.

Что ж, у вас есть пара вариантов здесь:

1. Хранение полномочий где -то еще

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

2. Шифровать его в коде

При шифровании вы можете выбрать между симметричным и асимметричным … или (как в S/MIME) использовать комбинацию обоих. Независимо от того, как вы решаете, всегда будет вопрос, как обеспечить параметры для шифрования. Если вы сохраните их в коде, вы могли бы сохранить свои учетные данные в ясном виде.

Ну, если вы выбираете асиметрический, есть путь, используя X509certificate2 . Прежде всего, асиметрический не дешевый, это одна из причин, по которой S/Mime использует комбинацию обоих. Но, поскольку у нас есть лишь очень небольшие объемы данных (учетные данные, как правило, намного меньше, чем 1 КБ), мы все равно можем их использовать. Этот маленький мой класс берет свойства из непосредственно полученного класса и хранит их в асиметрически зашифрованном базовом 64-стринге или кодированном асиметрически зашифрованном потоке BSON. Есть чтения, показывающая, как его использовать.

Это послужило мне очень хорошо! Покойся с миром, маленький помощник… Но теперь мы используем другой вариант:

3. Установите ключевое хранилище

При запуске в Azure загрузку из шерсти Azure Key Vault так же просто, как и эти несколько строк.

private static T LoadFromKeyVault(ref T creds, string credentialName, string version) 
where T : class, new()
{
  if (creds == null)
  {
      var astp= new AzureServiceTokenProvider();
      var kvc = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
                    astp.KeyVaultTokenCallback)
                );
      var secret = kvc.GetSecretAsync("https://.vault.azure.net/", 
          credentialName, 
          version).Result;
      creds = JsonConvert.DeserializeObject(secret.Value);
   }
   return creds;
}

Вы управляете доступом в самом KeyVault с управляемыми идентификаторами. Таким образом, разрешенные и управляемые принципы (пользователи/приложения) могут добраться до ваших драгоценных учетных данных, в то время как TLS защищает транспорт.

Оригинал: «https://dev.to/andreasjakof/managing-credentials-18d1»