MVC场景下防伪Cookie令牌与表单字段令牌不匹配问题咨询
ASP.NET 防伪令牌双报错排查清单
报错1:The anti-forgery cookie token and form field token do not match 已配置同machineKey仍出现的排查项
- 确认所有服务器的
machineKey配置完全一致,检查子目录web.config是否覆盖了根目录的配置,同时删除validationKey和decryptionKey属性中的IsolateApps、AutoGenerate参数,确保两个密钥是固定值而非自动生成 - 验证负载均衡会话粘性配置:未开启粘性时用户的页面请求和表单提交请求可能分发到不同节点,即使machineKey一致也可能因令牌附加校验逻辑不匹配报错,可临时开启会话粘性验证问题是否消失
- 检查防伪配置自定义逻辑:确认所有部署节点代码版本一致,不存在部分节点修改了
AntiForgeryConfig.AdditionalDataProvider、AntiForgeryConfig.CookieName、AntiForgeryConfig.FormFieldName等配置的情况 - 排查客户端Cookie拦截情况:确认用户浏览器未禁用站点Cookie,安全软件、代理服务未篡改或删除防伪Cookie内容
报错2:禁用Output Cache后出现The required anti-forgery cookie "__RequestVerificationToken_L015V1AvU1BP0" is not present 的排查项
- 检查原有Output Cache规则:确认之前启用缓存时是否将含防伪表单的页面纳入缓存范围,导致缓存页面携带的令牌与用户Cookie不匹配,禁用缓存后排查页面生成逻辑是否正常写入防伪Cookie
- 验证响应头Cookie写入状态:访问含防伪表单的页面时,检查响应头中是否存在对应名称的
Set-Cookie字段,排查是否有全局过滤器、中间件意外移除了防伪Cookie的写入操作 - 排查请求携带Cookie逻辑:如果是Ajax提交表单,确认请求头中正确携带了防伪Cookie,是否存在全局Cookie过滤规则误删防伪Cookie的情况
- 核对令牌生成代码逻辑:检查是否存在手动调用
AntiForgery.GetTokens()时未同步处理Cookie写入的问题,或者是否在无Cookie上下文(如API接口、后台任务)中调用了防伪令牌生成逻辑导致写入失败
优先在单节点部署环境下复现问题,排除多节点负载均衡的影响后再进一步排查代码逻辑,可大幅降低排查成本。
内容的提问来源于stack exchange,提问作者Saif
相关产品推荐
相关产品推荐

