在ASP.NET(不是核心)中,我通常会将一个machineKey添加到web.config中,这样我就可以在本地机器而不是服务器上执行某些功能,这样数据库/回调操作就会使用相同的键。例如
<system.web>
<machineKey validationKey="*********"
decryptionKey="*********"
validation="HMACSHA256"
decryption="AES" />
</system.web>
有人可以建议如何在ASP.NET Core 2.0中完成这项工作吗?
你现在需要使用DataProtection APis:
ASP.NET Core数据保护堆栈提供了一个简单易用的加密API,开发人员可以使用它来保护数据,包括密钥管理和轮换。
样品可以在官方DataProtection repo找到。
顺便提一下,同样的方法适用于ASP.NET:Replacing <machineKey>
in ASP.NET
数据保护系统基于两个核心概念 - 数据保护提供程序(由IDataProtectionProvider
接口表示),用于通过IDataProtector
方法创建数据保护器(由CreateProtector
接口表示)。数据保护器用于加密和解密数据。
要将IDataProtectionProvider
注册到DI,请使用.AddDataProtection
方法:
public void ConfigureServices(IServiceCollection services)
{
// Adds data protection services
services.AddDataProtection();
...
}
对于您希望基于负责生成身份验证cookie的一些经典ASP.NET应用程序构建ASP.NET核心应用程序的遗留目的,有一个开源库可用于使您能够将这些传统cookie用于ASP .NET核心应用程序。开发人员使用.NET Framework参考实现来构建他们自己的基于Machinekey的加密/解密逻辑。见https://github.com/synercoder/FormsAuthentication
我使用我的数据库上下文来跨多个实例持久化密钥。
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>();
}