当我使用用户的凭证登录时,首次登录应用程序时没有错误,
但是当我注销并再次使用其他用户的凭据登录时出现错误
提供的防伪令牌适用于用户" UserName",但当前用户是""。
我正在使用AntiForgoryToken
IPrincipal
和asp.net mvc 5
我试过了:
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;
如何解决此错误?
提前致谢。
答案 0 :(得分:1)
我发现我的IIS实例启用了匿名和Windows身份验证,导致我的应用程序出现此异常
Authentication Settings both enabled
此设置似乎是此异常的原因。似乎ValidateAntiForgeryToken操作过滤器使用在Anon身份验证中填充空字符串的当前用户,然后尝试将其与使用Win身份验证填充的令牌进行匹配。
通过关闭Windows或匿名身份验证(对于我的应用程序,我关闭了Anon身份验证),令牌现在匹配。
Authentication Settings one enabled
可以在IIS管理器或web.config文件中更改此设置,如此
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
答案 1 :(得分:0)
您真的不需要在登录的post方法中检查防伪令牌。
防伪代币可以防止CSRF攻击。当恶意脚本/链接代表您在您不知情或未经您同意的情况下发布HTTP请求时,就会发生CSRF攻击。当您的页面上嵌入了防伪令牌时,服务器可以在收到请求时检查此令牌,以验证请求是否确实来自页面。来自恶意脚本或链接的请求将不具有令牌并且将失败。
因此,您要保护的所有其他帖子操作都应使用 [Authorize]
和[ValidateAntiForgeryToken]
属性进行修饰。但是,登录post方法不需要这些属性。
更新:确实需要。请参阅Stephen Muecke的评论中的答案。