Как реализовать 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>();
}