asp.net-core - 为什么 AspNetCore DataProtection Azure 存储使用内部 key

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

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

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

启动.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);

Controller 构造函数

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 中的 key 之一,而不是上传到 Azure Blob 存储的 key 。

一些背景知识,因为它可能会影响事情。我最初创建了一个单独的 DataProtectionService 类,该类使用我为项目维护的 key 通过 IDataProtection 进行加密。它不会安装在 Azure 上的可读位置,因此我必须切换它的存储位置。这是现在 Azure 存储的关键。当相同的 key 存储在本地时,我尝试解密的数据最初是加密的。

我做错了什么?

最佳答案

我刚刚将标题更改为这个,现在我明白发生了什么。其中之一是我有两个以相同序列开头的指南,这让我很困惑。其中一个在我的电脑上。另一个已添加到已上传到 Azure Blob 存储的 key 文件中。

但这并不能解释问题。以下是希望对其他人有所帮助的解释:

一旦切换到在 Azure Blob 存储下运行,数据保护子系统就会向 Azure 上的 keys.xml 文件添加第二个 key 。该 key 位于最初的 <key> 内元素已经存在。它创建了一个嵌套的 <key>根内的元素<key>元素。由于未知原因(可能是错误),数据保护中的 key 环代码忽略了根 <key>元素,它代表我需要的键,并且只加载了嵌套的 <key>元素。

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

关于asp.net-core - 为什么 AspNetCore DataProtection Azure 存储使用内部 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162558/

相关文章:

c# - ASP.NET MVC 核心/6 : Multiple submit buttons

c# - 我如何在 Kitematic Boot2docker linux 上安装东西?

c# - .NET Core 和 .NET Framework 交互

java - 使用 BlobOutputStream 在 Azure 中上传 blob

c# - ASP.NET MVC 6 文件夹授权

c# - .Net Blazor 优于 Angular、React 或其他 javascript 框架

.net-core - Stripe 帐单地址 C#/Dotnet 核心

.net - 使用 IfModifiedSince 访问条件是否会减少 Azure Blob 存储事务的数量?

javascript - 如何使用环境变量为浏览器实现Microsoft Azure Blob存储?

multithreading - 如何在 ASP .NET Core 请求管道中仍有未完成的子线程的情况下停止线程重用?