ValidateAntiforgeryToken 失败

Posted

技术标签:

【中文标题】ValidateAntiforgeryToken 失败【英文标题】:ValidateAntiforgeryToken failure 【发布时间】:2021-12-02 12:57:22 【问题描述】:

我正面临 AntiforgeryToken 验证的问题。

我正在发送这样的数据:

var data = 
                    __RequestVerificationToken: '@GetAntiXsrfRequestToken()',
                    Id: id,
                    ResolverGID: resolverGID
                ;

我正在使用 fetch 方法发送 POST 数据

return fetch(fetchURL, JSON.stringify(data))
            .then(async (response) => 
                return response.json();
            )
            .catch(() => 
                return false;
            );

发送的数据如下所示:

Id: 98
ResolverGID: "XXXX"
__RequestVerificationToken: "CfDJ8EaAHBfZaBJBuxJJzC77RytBbhcw-gV2E_x0mfFVVhCy0BSmE9L5w5jzIW-7CrY_pCClHed5Ez6D3vuDj5rWWyoKr90MSOu-uBMGUuoF9iIXQ9y4vUjY_sxa5fghGEo-Xcp5KC541aGD407Fz9D9itZMeID5jqRv61IRINTSwJH_2yRvgg-BC1cDAriut22Oyw"

但我的方法返回错误 400:错误请求。

当我使用 [IgnoreAntiForgeryToken] 而不是 [ValidateAntiForgeryToken] 属性时它可以工作,但使用防伪令牌验证它不起作用。

当我在模态窗口中使用相同的token函数发送数据时,没问题...

有人可以帮我吗?

谢谢

【问题讨论】:

【参考方案1】:

也许我已经找到了解决办法。

[ValidateAntiForgeryToken] 仅在发送 FormData 格式时有效,所以我必须像这样发送数据:

let data = new FormData();
                data.append('Id', id);
                data.append('ResolverGID', resolverGID);
                data.append('__RequestVerificationToken', '@GetAntiXsrfRequestToken()');

然后它按预期工作。

【讨论】:

以上是关于ValidateAntiforgeryToken 失败的主要内容,如果未能解决你的问题,请参考以下文章

如何全局设置 ValidateAntiForgeryToken

Web API 和 ValidateAntiForgeryToken

ValidateAntiforgeryToken 失败

ValidateAntiForgeryToken 400 错误使用角度 13 和 ASP.NET 核心 5

如何正确使用ValidateAntiForgeryToken?

带有 SPA 架构的 ValidateAntiForgeryToken