【问题标题】:Why is AspNet Core IDataProtection Azure Storage Using Inner Key为什么 AspNetCore DataProtection Azure 存储使用内键
【发布时间】:2017-06-28 23:44:14
【问题描述】:

我已经在这几天了,看不出我做错了什么。如果有人能告诉我我做错了什么,我将不胜感激。

我经历了多次迭代。这是我目前所拥有的,但不起作用。

Startup.cs

var creds = new StorageCredentials(settings.CloudStorageAccount, settings.CloudStorageKey);
var account = new CloudStorageAccount(creds, true);
var blobClient = account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference($"{dpsFolder}-{_env.EnvironmentName}".ToLower());
container.CreateIfNotExistsAsync().GetAwaiter().GetResult();
services.AddDataProtection()
        .SetApplicationName(settings.ApplicationName)
        .PersistKeysToAzureBlobStorage(container, dpsFileName);

控制器 ctor

public ExternalSettingController([FromServices] IExternalSettingRepo repo,
                                [FromServices] IOptions<AppSettings> opts,
                                [FromServices] ILogger<ExternalSettingController> logger,
                                [FromServices] IHostingEnvironment env,
                                [FromServices] IDataProtectionProvider dpp)
        : base(opts, repo, logger)
    {
        _dataProtector = dpp.CreateProtector("blah.Integration");

    }

Get 方法中的实际调用

toReturn.Plain = _dataProtector.Unprotect(found.SettingValue);

一切似乎都加载正常,尽我所能通过调试器判断。设置正确。当调用 Unprotect 时,系统选择使用 C:\Users\blah\AppData\Local\ASP.NET\DataProtection-Keys 中的密钥之一,而不是上传到 Azure Blob 存储的密钥。

一点背景,因为它可能会影响事情。我最初创建了一个单独的 DataProtectionService 类,该类使用我为项目维护的密钥使用 IDataProtection 进行加密。它没有安装在 Azure 上一个可读的地方,所以我不得不切换它的存储位置。这就是现在 Azure 存储中的关键。我尝试解密的数据最初是在本地存储相同密钥时加密的。

我做错了什么?

【问题讨论】:

    标签: asp.net-core .net-core azure-blob-storage


    【解决方案1】:

    我刚刚把标题改成了这个,现在我明白了发生了什么。其中一个原因是我有两个以相同序列开头的 Guid,这让我感到困惑。一个在我的电脑上。另一个已添加到已上传到 Azure Blob 存储的密钥文件中。

    但这并不能解释问题。以下是解释,希望随着时间的推移对其他人有所帮助:

    一旦切换到在 Azure Blob 存储下运行,数据保护子系统就会在 Azure 上的 keys.xml 文件中添加第二个密钥。该密钥进入了已经存在的初始 &lt;key&gt; 元素。它在根 &lt;key&gt; 元素内创建了一个嵌套的 &lt;key&gt; 元素。由于未知原因(可能是错误),Data Protection 中的密钥环代码随后忽略了根 &lt;key&gt; 元素,该元素表示我需要的密钥,并且只加载了嵌套的 &lt;key&gt; 元素。

    为了解决这个问题,我换了它们。新生成的现在是根键,旧的是嵌套键。这样,正确的密钥就被加载了,现在一切都很开心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2012-02-18
      • 2020-11-22
      相关资源
      最近更新 更多