首页 > 解决方案 > PersistKeysToAzureBlobStorage 是否会影响性能?是否在启动时或每次调用时从那里获取一次密钥?

问题描述

我想将我的数据存储在 Blob 存储中。为此,我至少需要致电:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
        .PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"));
}

现在的问题是,它们的密钥是在应用程序启动时获取的,还是每次需要它们时总是从 blob 中获取?

那么,如果我决定使用依赖于 Key-Vault 的密钥来保护这些密钥,ProtectKeysWithAzureKeyVault 是否会访问仅在启动时或每次调用时很慢的密钥库?

标签: asp.net-coreazure-keyvault

解决方案


根据源代码和测试演示,它只会在启动时从那里获取启动时的密钥。

服务注入的一部分:

    //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 请求。

你会发现它只会读一次。

在此处输入图像描述


推荐阅读