我已经设置了一个用于开发的数据库,该数据库在本地网络中可用。我实现了Dataprotection Api来加密我的模型(实体框架(的一些敏感信息,然后将其保存到数据库中。在启动时,我这样配置它:
var keysfolder = Path.Combine(Environment.ContentRootPath, "Keys");
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(keysfolder));
密钥在文件夹中,不受保护,也不在存储库中共享,因为它只用于测试数据。我可以在两台不同的Linux机器上访问我的应用程序中的数据,但在一台Windows PC上,我会收到无效负载异常。它们共享相同的提交并使用相同的目的字符串。所以我一定没能理解。我想我可以在生产中备份密钥和数据库,并在必要时在另一台机器上重新部署,而不会丢失数据。有人能解释一下为什么我不能用Windows电脑上的钥匙吗?
我有这个问题的解决方案。我在这里找到了答案: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))