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

pat*_*gle 13 asp.net-core asp.net-core-2.0

在ASP.NET(不是核心)中,我通常会将一个machineKey添加到web.config中,这样我就可以在本地机器而不是服务器上执行某些功能,这样数据库/回调操作就会使用相同的键.例如

<system.web>
  <machineKey validationKey="*********" 
              decryptionKey="*********" 
              validation="HMACSHA256" 
              decryption="AES" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

有人可以建议如何在ASP.NET Core 2.0中完成这项工作吗?

Set*_*Set 13

您现在需要使用DataProtection APis:

ASP.NET Core数据保护堆栈提供了一个简单易用的加密API,开发人员可以使用它来保护数据,包括密钥管理和轮换.

样品可以在官方DataProtection仓库中找到.

顺便提一下,相同的方法适用于ASP.NET:在ASP.NET中替换<machineKey>


数据保护系统基于两个核心概念 - 数据保护提供程序(由IDataProtectionProvider接口表示),用于IDataProtector通过CreateProtector方法创建数据保护程序(由接口表示).数据保护器用于加密和解密数据.

注册IDataProtectionProviderDI使用.AddDataProtection方法:

public void ConfigureServices(IServiceCollection services)
{
    // Adds data protection services
    services.AddDataProtection();
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 所以 AddDataProtection 就是所需要的一切...我不知道它是如何工作的...当然你必须在某个地方设置密钥....可以添加一个完整的示例吗? (2认同)

小智 5

您可以在https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.2&tabs=visual-studio找到很好的示例

我使用我的数据库上下文在多个实例中保存键。

数据库上下文

public class MyContext : IDataProtectionKeyContext
{
  ...
  // This maps to the table that stores keys.
  public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

启动文件

public void ConfigureServices(IServiceCollection services)
{
  ...
  services.AddDataProtection().PersistKeysToDbContext<MyContext>();
}
Run Code Online (Sandbox Code Playgroud)