Bushman.Extensions.Configuration.Secrets
3.0.0
dotnet add package Bushman.Extensions.Configuration.Secrets --version 3.0.0
NuGet\Install-Package Bushman.Extensions.Configuration.Secrets -Version 3.0.0
<PackageReference Include="Bushman.Extensions.Configuration.Secrets" Version="3.0.0" />
paket add Bushman.Extensions.Configuration.Secrets --version 3.0.0
#r "nuget: Bushman.Extensions.Configuration.Secrets, 3.0.0"
// Install Bushman.Extensions.Configuration.Secrets as a Cake Addin #addin nuget:?package=Bushman.Extensions.Configuration.Secrets&version=3.0.0 // Install Bushman.Extensions.Configuration.Secrets as a Cake Tool #tool nuget:?package=Bushman.Extensions.Configuration.Secrets&version=3.0.0
Bushman.Extensions.Configuration.Secrets
Распаковка секретов в конфигурационных настройках приложения.
О пакете
Расширение для распаковки секретов в настройках приложения, представленных экземпляром Microsoft.Extensions.Configuration.IConfiguration.
Для работы с секретами используется пакет Bushman.Secrets, реализующий абстрактную модель, определённую в пакете Bushman.Secrets.Abstractions.
Пример использования
Предварительно подключите к своему проекту следующие пакеты:
using Bushman.Secrets.Abstractions.Services;
using Bushman.Secrets.Services;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
using Bushman.Secrets.Abstractions.Models;
using Microsoft.Extensions.Configuration;
using System.IO;
using Bushman.Extensions.Configuration.Secrets;
namespace ConsoleApp1 {
internal class Program {
static void Main(string[] args) {
// 01. СОЗДАЁМ ПРОВАЙДЕР ФАБРИКИ СЕКРЕТОВ.
ISecretFactoryProvider secretFactoryProvider = new SecretFactoryProvider();
// 02. СОЗДАЁМ ФАБРИКУ СЕКРЕТОВ.
string secretFactoryAssemblyName = "Bushman.Secrets";
string secretFactoryClassName = "Bushman.Secrets.Services.SecretFactory";
ISecretFactory secretFactory = secretFactoryProvider.CreateSecretFactory(
secretFactoryAssemblyName, secretFactoryClassName);
// 03. СОЗДАЁМ МЕХАНИЗМ ШИФРОВАНИЯ/РАСШИФРОВКИ.
IEncryptor encryptor = secretFactory.CreateEncryptor();
// 04. ВЫБИРАЕМ СЕРТИФИКАТ, КОТОРЫЙ БУДЕМ ИСПОЛЬЗОВАТЬ ДЛЯ ШИФРОВАНИЯ И РАСШИФРОВКИ.
StoreLocation storeLocation = StoreLocation.CurrentUser; // Хранилище сертификатов.
string thumbprint = null; // Отпечаток интересующего нас сертификата.
using (X509Store store = new X509Store(storeLocation)) {
store.Open(OpenFlags.ReadOnly);
// Для нашего примера берём первый попавшийся сертификат.
X509Certificate2 certificate = store.Certificates[0];
store.Close();
using (certificate) {
thumbprint = certificate.Thumbprint;
}
}
// 05. ФОРМИРУЕМ НАСТРОЙКИ ДЛЯ РАБОТЫ С СЕКРЕТАМИ.
ISecretOptions secretOptions = secretFactory.CreateSecretOptions(storeLocation,
HashAlgorithmName.SHA1, thumbprint);
// Строка, представляющая собой конфиденциальную информацию.
string value = "Hello, World!";
// Создаём незашифрованный секрет.
ISecret decryptedSecret = secretFactory.CreateDecryptedSecret(secretOptions, value);
// Шифруем секрет.
ISecret encryptedSecret = encryptor.Encrypt(decryptedSecret);
// ПРИМЕРЫ БАЗОВЫХ ОПЕРАЦИЙ С СЕКРЕТАМИ, НАХОДЯЩИМИСЯ В СОСТАВЕ ПРОИЗВОЛЬНОГО ТЕКСТА.
// ----------------------------------------------------------------------------------
// Тестовая строка, содержащая распакованное значение, а так же расшифрованный и
// зашифрованный секреты с этим же значением.
string text = $@"{{
""prop1"": ""{value}"",
""prop2"": ""{decryptedSecret}"",
""prop3"": ""{encryptedSecret}""
}}";
Stream stream = new MemoryStream(encryptor.OptionsBase.Encoding.GetByteCount(value));
using (var writer = new StreamWriter(stream, encryptor.OptionsBase.Encoding, 1024, true)) {
writer.Write(text);
writer.Flush();
stream.Position = 0;
}
IConfigurationRoot configRoot = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonStream(stream)
.Build();
// На данный момент времени секреты в настройках приложения всё ещё не распакованы...
// Распаковываем все секреты в настройках приложения.
configRoot.ExpandSecrets(secretFactory);
// Теперь все секреты в configRoot распакованы!
}
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Bushman.Secrets (>= 3.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 8.0.2)
- Microsoft.Extensions.Configuration.Json (>= 8.0.0)
- System.Text.Json (>= 8.0.4)
-
.NETStandard 2.1
- Bushman.Secrets (>= 3.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 8.0.2)
- Microsoft.Extensions.Configuration.Json (>= 8.0.0)
- System.Text.Json (>= 8.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Изменена объектная модель настроек секретов в соответствии с обновлённой логикой шифрования/расшифровки.