You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨项目使用IDataProtectionProvider解密数据失败问题求助

跨项目使用IDataProtectionProvider解密失败的解决方案

项目1通过IDataProtectionProvider创建保护标识为"ManagementPortal.Controllers"的IDataProtector,加密用户ID生成token后在项目1内解密正常,但项目2用相同标识创建IDataProtector调用Unprotect时解密失败,核心原因是ASP.NET Core数据保护默认给每个项目生成独立密钥环,跨项目密钥不匹配导致解密失败。

解决步骤

  1. 统一配置应用名称与密钥存储
    在两个项目的Program.cs(.NET 6+)中添加数据保护共享配置,让两个项目使用同一套密钥:
builder.Services.AddDataProtection()
    // 两个项目必须设置完全相同的应用名称
    .SetApplicationName("ManagementPortal")
    // 指定共享密钥存储目录,也可选用Azure Blob、Redis等分布式存储方案
    .PersistKeysToFileSystem(new DirectoryInfo(@"D:\SharedDataProtectionKeys"));
  1. 确保保护标识完全一致
    两个项目调用CreateProtector时传入的参数必须完全匹配,即均为"ManagementPortal.Controllers",任何字符、大小写差异都会导致解密失败。

  2. 检查共享目录权限
    确保两个项目的运行进程都拥有共享密钥目录的读写权限,避免因权限不足无法加载密钥。

验证

完成配置后,重新在项目1生成加密token,项目2即可正常调用Unprotect方法解密。

内容的提问来源于stack exchange,提问作者Gouthami Shivakoti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:31:27