如何在ASP.NET Core 2.0中实现machineKey

时间:2017-10-10 13:36:16

标签: asp.net-core 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中完成此操作吗?

4 个答案:

答案 0 :(得分:11)

您现在需要使用DataProtection APis

  

ASP.NET核心数据保护堆栈提供了一个简单易用的加密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();
    ...
}

答案 1 :(得分:0)

出于遗留目的,您要基于负责生成身份验证Cookie的某些经典ASP.NET应用程序构建ASP.NET Core应用程序,可以使用开源库来使用这些遗留Cookie进入您的ASP.NET Core应用程序。开发人员已使用.NET Framework参考实现来构建他们自己的基于Machinekey的加密/解密逻辑。参见https://github.com/synercoder/FormsAuthentication

答案 2 :(得分:0)

您可以在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>();
}

答案 3 :(得分:-1)

asp.net Core 中,您应该设置数据保护系统。

有关更多信息,请阅读this answer