IDefaultKeyServices在ASP.NET Core 2.0中的位置是什么?有什么替代它?

时间:2018-03-09 20:05:09

标签: security asp.net-core-2.0

在ASP.NET Core 1.x中,IoC容器可用于获取Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.IDefaultKeyServices的具体实现,但在ASP.NET Core 2.0中没有向IoC注册此类接口。 IDefaultKeyServices去了哪里?或者取而代之的是什么?

界面看起来像这样:

 public interface IDefaultKeyServices {
    //
    // Summary:
    //     Gets the default Microsoft.AspNetCore.DataProtection.XmlEncryption.IXmlEncryptor
    //     service (could return null).
    IXmlEncryptor GetKeyEncryptor();
    //
    // Summary:
    //     Gets the default Microsoft.AspNetCore.DataProtection.Repositories.IXmlRepository
    //     service (must not be null).
    IXmlRepository GetKeyRepository();
}

Microsoft记录了界面here

我意识到这个接口位于“内部”命名空间中,并且可以更改(并且更改它!)。但是现在如何获得2.x中的默认密钥存储库和默认密钥加密器?

1 个答案:

答案 0 :(得分:1)

input = 1 ' line 1 ret = myclass.ouch(input) ' line 2 ret = ret + 1 ' line 3 及其实施IDefaultKeyServices已被commit删除。

可以通过KeyManagementOptionsDefaultKeyServicesIXmlRepository属性访问IXmlEncryptorXmlRepository的实例。

Key storage providers文章列出了XmlEncryptor的内置实现。您可以通过IXmlRepository上的PersistKeysTo...()扩展方法设置相应的存储库,例如:

IDataProtectionBuilder

services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(@"c:\temp\"));

Key Encryption At Rest文章列出了services.AddDataProtection() .PersistKeysToRegistry(Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Sample\keys")); 的内置实现。您可以通过在IXmlEncryptor上调用ProtectKeysWith...()扩展方法来设置适当的加密器,例如:

IDataProtectionBuilder

这是一个演示示例(需要Microsoft.AspNetCore.DataProtection NuGet):

services.AddDataProtection()
    .ProtectKeysWithDpapi();

除了已经链接的另外一篇有用的文章:Key management extensibility