提供的防伪令牌是为用户"UserName",但当前用户是" "



当我使用用户凭据登录时,第一次登录应用程序时没有错误,

但当我注销并再次使用其他用户的凭据登录时,出现错误

提供的防伪令牌是为用户"UserName"提供的,但当前用户是"。

我正在用asp.net mvc 5 实现AntiForgoryTokenIPrincipal

我试过了:

  1. Application_Start()中的AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;

  2. 我已经参考了这个链接当尝试注销时,提供的防伪令牌是为用户"提供的;XXXX";,但是当前用户是"用户"

如何修复此错误?

提前谢谢。

我发现我的IIS实例同时启用了匿名和Windows身份验证,这导致了我的应用程序出现此异常

身份验证设置均启用

此设置似乎是导致此异常的原因。ValidateAntiForgeryToken操作筛选器似乎使用了在Anon身份验证中填充了空字符串的当前用户,然后试图将其与使用Win身份验证填充的令牌进行匹配。

通过关闭Windows或匿名身份验证(对于我的应用程序,我关闭了Anon身份验证),令牌现在匹配。

身份验证设置一个启用的

此设置可以在IIS管理器或类似的web.config文件中更改

<system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="false" />
        <windowsAuthentication enabled="true" />
      </authentication>
    </security>
</system.webServer>

您实际上不需要在登录的post方法上检查防欺诈令牌。

反欺诈代币提供保护,免受CSRF攻击。当恶意脚本/链接在您不知情或不同意的情况下代表您发布HTTP请求时,就会发生CSRF攻击。当防伪造令牌嵌入到页面上时,服务器可以在收到请求时检查该令牌,以验证该请求是否确实来自页面。来自恶意脚本或链接的请求将不具有令牌,并且将失败。

因此,您想要保护的所有其他post操作都应该用[Authorize][ValidateAntiForgeryToken]属性来修饰它们。但是,login-post方法不需要这两个属性中的任何一个

更新:这真的很需要。请参阅Stephen Muecke的评论中的答案。

相关内容

  • 没有找到相关文章

最新更新