Как реализовать machineKey в ASP.NET Core 2.0

В ASP.NET(не ядро) я бы обычно добавлял machineKey в web.config, чтобы я мог выполнять некоторые функции на локальном компьютере, а не на сервере, чтобы операции с базой данных/обратным вызовом использовали один и тот же ключ. Например,

<system.web>
  <machineKey validationKey="*********" 
              decryptionKey="*********" 
              validation="HMACSHA256" 
              decryption="AES" />
</system.web>

Пожалуйста, кто-нибудь может посоветовать, как это можно сделать в ASP.NET Core 2.0?

Ответ 1

Теперь вам нужно использовать DataProtection APis:

Стек данных защиты данных ASP.NET Core обеспечивает простой и простой в использовании криптографический API, который разработчик может использовать для защиты данных, включая управление ключами и ротацию.

Образцы можно найти в официальном репозитории DataProtection.

Тот же подход, кстати, работает с ASP.NET: Замена <machineKey> в ASP.NET


Система защиты данных построена на двух основных понятиях: поставщик защиты данных (представленный интерфейсом IDataProtectionProvider), который используется для создания защитника данных (представлен интерфейсом IDataProtector) методом CreateProtector, Защитник данных используется для шифрования и дешифрования данных.

Чтобы зарегистрировать IDataProtectionProvider в DI, используйте метод .AddDataProtection:

public void ConfigureServices(IServiceCollection services)
{
    // Adds data protection services
    services.AddDataProtection();
    ...
}

Ответ 2

В устаревших целях, когда вы хотите создать свои приложения ASP.NET Core на основе классического приложения ASP.NET, отвечающего за создание файлов cookie для проверки подлинности, имеется библиотека с открытым исходным кодом, которая позволяет использовать эти устаревшие файлы cookie в ASP. Приложение .NET Core. Разработчики использовали эталонную реализацию .NET Framework для создания своей собственной логики шифрования/дешифрования на основе Machinekey. См. Https://github.com/synercoder/FormsAuthentication

Ответ 3

Хорошие примеры можно найти по адресу https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.2&tabs=visual-studio

Я использовал контекст моей базы данных, чтобы сохранить ключи в нескольких экземплярах.

DbContext.cs

public class MyContext : IDataProtectionKeyContext
{
  ...
  // This maps to the table that stores keys.
  public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
  ...
  services.AddDataProtection().PersistKeysToDbContext<MyContext>();
}