ASP. NET Core - Хранение ключа шифрования в Redis - PullRequest
1 голос
/ 03 апреля 2020

Я не очень разбираюсь в механизме защиты данных, особенно в. net core / Redis, поэтому я не могу понять из официального документа c, что и как берется ключ шифрования для хранения в Redis:

var conn = $"{host}:{port}";
var redis = ConnectionMultiplexer.Connect(conn);

services.AddStackExchangeRedisCache(options =>
        {
            options.Configuration = conn;
        });
//here            
services.AddDataProtection()
        .PersistKeysToRedis(Redis, "DataProtection-Keys"); //where is the VALUE for the KEY? Should it be saved to Redis manually before call this?

Поэтому мне интересно, какой ключ я могу использовать (у меня его нет, как его создать?), Где его хранить и как указать в конфигах, где его взять. from.

Когда я запускаю приложение, запись с ключом «DataProtection-Keys» добавляется в Redis, но я не знаю, какое это значение и работает ли оно вообще.

Итак Другой вопрос - как проверить, работает ли шифрование?

Пожалуйста, помогите мне понять основы, любые примеры очень ценятся.

1 Ответ

1 голос
/ 06 апреля 2020

Система защиты данных поможет создавать ключи и управлять ими, и вам не нужно создавать / сохранять их вручную в Redis.

Кроме того, "DataProtection-Keys" здесь в .PersistKeysToRedis(Redis, "DataProtection-Keys") метод является RedisKey , которое является уникальным именем части данных, и ключ, который требуется для шифрования, будет сохранен как значение (RedisValue).

как проверить, работает ли шифрование?

Вы можете обратиться к следующему фрагменту кода, чтобы внедрить IDataProtectionProvider и использовать его для создания экземпляра IDataProtector, а затем шифровать и дешифровать данные.

IDataProtector _protector;

public HomeController(IDataProtectionProvider provider)
{
    _protector = provider.CreateProtector(" WebDataProtection.Controllers.HomeController.v1");
}

public IActionResult Index()
{
    var input = "hello world";

    // protect the payload
    string protectedPayload = _protector.Protect(input);
    ViewBag.ProtectedPayload = $"Protect returned: {protectedPayload}";

    // unprotect the payload
    string unprotectedPayload = _protector.Unprotect(protectedPayload);
    ViewBag.UnprotectedPayload = $"Unprotect returned: {unprotectedPayload}";

    return View();
}

Результат теста

enter image description here

...