asp.net-core - 存储到 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 上使用密钥?
解决方案
我有一个解决这个问题的方法。我在这里找到了答案: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))
推荐阅读
- azure-sql-database - Azure SQL 数据库的 SSMS 索引提示
- r - 绘制一段时间内的数据趋势
- react-native - 无法在 React Native Share 中分享产品图片
- r - bigrquery - 错误:没有匹配的运算符签名 - 对于参数类型:DATE、FLOAT64
- c - free() 调用中的 _snwprintf_s 堆损坏错误
- mysql - 比较两个表后如何输出匹配?
- python - 如何将外部对象附加到系列索引
- reactjs - 如何在反应js中调用从一个组件到另一个组件的方法(在新选项卡中)
- android - 响应 Delphi 中的媒体按钮
- javascript - GetTokenId 在哪里使用