AntiForgeryToken 是否需要会话状态?

Does AntiForgeryToken requires session state?

我不使用会话,所以我将它连同我不需要的所有 HTTP 模块一起删除了。

我有时会收到此错误:System.Web.Mvc.HttpAntiForgeryException: The anti-forgery token could not be decrypted. If this application is hosted by a Web Farm or cluster, ensure that all machines are running the same version of ASP.NET Web Pages and that the <machineKey> configuration specifies explicit encryption and validation keys. AutoGenerate cannot be used in a cluster.

或者这个:System.Web.Mvc.HttpAntiForgeryException: The provided anti-forgery token was meant for a different claims-based user than the current user.

当我启用会话时,它起作用了。

所以问题是:csrf 的东西是否依赖于会话状态?

ASP.NET 会话不是防伪令牌工作所必需的。令牌存储在隐藏的表单字段和 cookie 中,与 cookie 会话分开(您可以找到详细信息 here)。此外,当防伪令牌无效时,会抛出异常,因此看起来您遇到的问题与防伪令牌无关。也许记录一个 Fiddler 会话,将其附加到一个新的 SO 问题,我们应该能够更好地指导您。