Я думаю, что мы все можем согласиться с тем, что хранение учетных данных в коде — действительно, действительно плохая идея! Вы можете не только переоценить сборки, но и с 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»