在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中的默认密钥存储库和默认密钥加密器?
答案 0 :(得分:1)
input = 1 ' line 1
ret = myclass.ouch(input) ' line 2
ret = ret + 1 ' line 3
及其实施IDefaultKeyServices
已被commit删除。
可以通过KeyManagementOptions
的DefaultKeyServices
和IXmlRepository
属性访问IXmlEncryptor
和XmlRepository
的实例。
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