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

ASP.NET Core站点部署后Post/授权操作出现Antiforgery令牌解密错误

问题原因及修复方案

你遇到的报错核心有两个诱因,你怀疑的配置顺序问题确实存在,同时还有数据保护密钥的存储问题:

1 现有配置错误点

1.1 中间件顺序错误

你当前Configure方法里的CORS中间件放置位置错误,CORS必须在认证、授权中间件之前执行,否则跨域请求会被提前拦截,同时也会干扰防伪令牌的验证流程。
当前错误顺序:

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors("global");

修正后顺序:

app.UseRouting();
// CORS必须放在认证授权之前
app.UseCors("global");
app.UseAuthentication();
app.UseAuthorization();

1.2 数据保护密钥未配置持久化

默认情况下ASP.NET Core的数据保护密钥是存储在进程内存中的,只要应用重启、更换部署实例、容器重建,密钥就会丢失,此时之前生成的防伪令牌、身份认证Cookie都无法解密,就是你日志里The key {key} was not found in the key ring报错的直接原因。

2 修复步骤

2.1 调整中间件顺序

按照上述1.1的要求调整Configure方法里的中间件顺序即可。

2.2 配置数据保护密钥持久化

你可以根据部署场景选择密钥存储位置,比如存储到本地文件的配置示例:

// 引用命名空间 using System.IO; using Microsoft.AspNetCore.DataProtection;
services.AddDataProtection()
    // 替换为实际有权限读写的目录路径
    .PersistKeysToFileSystem(new DirectoryInfo(@"/app/data/keyring"))
    // 应用名固定,不要随意修改,否则多实例部署时密钥无法通用
    .SetApplicationName("你的站点唯一标识名");

如果是多实例部署,也可以选择将密钥存储到数据库、共享存储或者云密钥管理服务中。

2.3 可选优化

你代码中services.AddIdentity调用已经默认注册了认证服务,重复的services.AddAuthentication()可以删除,不影响功能但可以减少冗余注册。

3 部署后注意事项

修复后首次上线时,老用户浏览器中存储的旧Cookie是用之前丢失的密钥加密的,会继续报错,引导用户清除站点Cookie或者等待旧Cookie过期即可恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:09:04