ASP.NET 存储到 ContentRootPath 的核心数据保护密钥在不同的机器上不起作用

ASP.NET Core Data Protection Key stored to ContentRootPath does not work on different machines

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

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

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

我有办法解决这个问题。 我在这里找到了答案: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))