asp.net-core - PersistKeysToAzureBlobStorage 是否会影响性能?是否在启动时或每次调用时从那里获取一次密钥?
问题描述
我想将我的数据存储在 Blob 存储中。为此,我至少需要致电:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"));
}
现在的问题是,它们的密钥是在应用程序启动时获取的,还是每次需要它们时总是从 blob 中获取?
那么,如果我决定使用依赖于 Key-Vault 的密钥来保护这些密钥,ProtectKeysWithAzureKeyVault 是否会访问仅在启动时或每次调用时很慢的密钥库?
解决方案
根据源代码和测试演示,它只会在启动时从那里获取启动时的密钥。
服务注入的一部分:
//You could find all the key management related service is registered as the Singleton.
private static void AddDataProtectionServices(IServiceCollection services)
{
if (OSVersionUtil.IsWindows())
{
services.TryAddSingleton<IRegistryPolicyResolver, RegistryPolicyResolver>();
}
services.TryAddEnumerable(
ServiceDescriptor.Singleton<IConfigureOptions<KeyManagementOptions>, KeyManagementOptionsSetup>());
services.TryAddEnumerable(
ServiceDescriptor.Transient<IConfigureOptions<DataProtectionOptions>, DataProtectionOptionsSetup>());
services.TryAddSingleton<IKeyManager, XmlKeyManager>();
services.TryAddSingleton<IApplicationDiscriminator, HostingApplicationDiscriminator>();
services.TryAddEnumerable(ServiceDescriptor.Singleton<IHostedService, DataProtectionHostedService>());
// Internal services
services.TryAddSingleton<IDefaultKeyResolver, DefaultKeyResolver>();
services.TryAddSingleton<IKeyRingProvider, KeyRingProvider>();
此外,我创建了一个测试演示来将密钥存储到 blob 存储并使用 fiddler 捕获读取密钥 http 请求。
你会发现它只会读一次。
推荐阅读
- neo4j - Neo4j 合并文本文件中的属性
- python - 用于回归的 SelectKBest 给出“未知标签类型”-错误
- javascript - angularJs 与 Angular CLI
- c# - Azure Bot Builder 从电报用户名获取电报 ID
- jasper-reports - talend - jasper tJasperReportExec 无法在 linux 上运行
- php - PHP & MySQL - 如果内容不在一个表中,请检查另一个表
- php - 刷新令牌上的 Firebase REST API INVALID_ARGUMENT
- android - ORMLite 堆栈跟踪错误,没有进一步的日志条目
- python - 在一定的时间限制内执行一个函数,如果是,将它与响应一起发送
- php - Symfony 4 Production Mode ErrorHandling Pages Memory Exhausted