跨项目使用IDataProtectionProvider解密数据失败问题求助
跨项目使用IDataProtectionProvider解密失败的解决方案
项目1通过IDataProtectionProvider创建保护标识为"ManagementPortal.Controllers"的IDataProtector,加密用户ID生成token后在项目1内解密正常,但项目2用相同标识创建IDataProtector调用Unprotect时解密失败,核心原因是ASP.NET Core数据保护默认给每个项目生成独立密钥环,跨项目密钥不匹配导致解密失败。
解决步骤
- 统一配置应用名称与密钥存储
在两个项目的Program.cs(.NET 6+)中添加数据保护共享配置,让两个项目使用同一套密钥:
builder.Services.AddDataProtection() // 两个项目必须设置完全相同的应用名称 .SetApplicationName("ManagementPortal") // 指定共享密钥存储目录,也可选用Azure Blob、Redis等分布式存储方案 .PersistKeysToFileSystem(new DirectoryInfo(@"D:\SharedDataProtectionKeys"));
确保保护标识完全一致
两个项目调用CreateProtector时传入的参数必须完全匹配,即均为"ManagementPortal.Controllers",任何字符、大小写差异都会导致解密失败。检查共享目录权限
确保两个项目的运行进程都拥有共享密钥目录的读写权限,避免因权限不足无法加载密钥。
验证
完成配置后,重新在项目1生成加密token,项目2即可正常调用Unprotect方法解密。
内容的提问来源于stack exchange,提问作者Gouthami Shivakoti
相关产品推荐
相关产品推荐

