首页 > 解决方案 > 存储到 ContentRootPath 的 ASP.NET Core 数据保护密钥在不同的机器上不起作用

问题描述

我已经设置了一个用于开发的数据库,该数据库在本地网络中可用。我实现了 Dataprotection Api 来加密我的模型(实体框架)的一些敏感信息,然后将其保存到数据库中。在 Startup 我这样配置它:

var keysfolder = Path.Combine(Environment.ContentRootPath, "Keys");
        services.AddDataProtection()
            .PersistKeysToFileSystem(new DirectoryInfo(keysfolder));

密钥位于文件夹中,在存储库中不受保护和共享,因为它仅用于测试数据。我可以在 2 台不同的 Linux 机器上访问我的应用程序中的数据,但在一台 Windows PC 上,我得到了 Invalid Payload 异常。它们共享相同的提交并使用相同的目的字符串。所以我一定没看懂。我认为我可以在生产中备份密钥和数据库并重新部署,如果需要在另一台机器上而不丢失数据。谁能解释为什么我不能在 Windows PC 上使用密钥?

标签: asp.net-coredata-protection

解决方案


我有一个解决这个问题的方法。我在这里找到了答案:https ://techcommunity.microsoft.com/t5/iis-support-blog/system-security-cryptography-cryptographicexception-the-payload/ba-p/1919096

注册 DataProtection 时必须调用 SetApplicationName:

services.AddDataProtection()
                .SetApplicationName("MyApp")
                .PersistKeysToFileSystem(new DirectoryInfo(keysfolder))

推荐阅读