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

.NET 6解密.AspNetCore.Cookies时报‘The payload was invalid’

解密.AspNetCore.Cookies时「The payload was invalid」错误排查方案
  • 确认Protector参数的严格匹配性
    CookieAuthenticationMiddleware的保护器参数是完全强匹配的,需逐一核对:

    • 第三个参数「v2」是否和认证中间件实际使用的版本一致,部分场景下可能为「v1」或无版本后缀
    • cookieKey必须与CookieAuthenticationOptions中配置的AuthenticationScheme完全对应,默认值为「Cookies」,自定义Scheme时需严格匹配
      可通过配置代码确认,示例:
    services.AddAuthentication("MyCustomScheme")
        .AddCookie("MyCustomScheme", options => { ... });
    

    此时保护器参数应为「Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware」、「MyCustomScheme」、「v2」(若版本为v2)

  • 修正Cookie解码方式
    .AspNetCore.Cookies采用Base64Url编码,而非标准Base64,错误解码会直接导致解密失败,正确流程:

    1. 使用WebEncoders.Base64UrlDecode将Cookie值解码为字节数组
    2. 再调用保护器的Unprotect方法解密
  • 验证DataProtection密钥一致性
    即便使用Redis存储密钥XML,仍需确认:

    • 解密应用与生成Cookie的应用使用完全相同的DataProtection配置,包括ApplicationName(若已设置)、Redis存储配置
    • 密钥未过期或被强制轮换,密钥轮换后需保留旧密钥足够时长以解密旧Cookie
      可直接查看Redis中存储的密钥XML,确认是否包含生成目标Cookie时使用的密钥
  • 排查Cookie完整性

    • 确保获取的Cookie值完整,无日志截断、请求传输过程中的内容丢失
    • 可直接从浏览器复制完整Cookie值,手动传入解密方法测试,排除获取环节的问题
  • 调试保护器一致性
    在应用启动时创建与解密代码相同的保护器,通过加密测试字符串再解密的方式验证:

    var protector = dataProtectionProvider.CreateProtector(
        "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
        "YourScheme",
        "v2");
    var encrypted = protector.Protect(Encoding.UTF8.GetBytes("test"));
    var decrypted = protector.Unprotect(encrypted); // 此步骤成功则说明保护器创建无问题
    

内容的提问来源于stack exchange,提问作者Learning AWS and PostgreSQL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:00:52