Asp.net mvc 5 提供的防伪令牌是为用户提供的;用户名";,但当前用户是&引用;

Asp.net mvc 5 提供的防伪令牌是为用户提供的;用户名";,但当前用户是&引用;,asp.net-mvc-5,antiforgerytoken,iprincipal,Asp.net Mvc 5,Antiforgerytoken,Iprincipal,当我使用用户凭证登录时,第一次登录应用程序时没有错误 但当我注销并再次使用其他用户的凭据登录时,出现了一个错误 提供的防伪令牌用于用户“UserName”,但当前用户为“” 我正在用asp.net mvc 5实现AntiForgoryToken和IPrincipal 我试过: AntiForgeryConfig.suppressIdentityEuristicChecks=true在应用程序_Start()中 我已经参考了这个链接 如何修复此错误 提前感谢。您实际上不需要在登录的post方法上检

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

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

提供的防伪令牌用于用户“UserName”,但当前用户为“”

我正在用asp.net mvc 5实现
AntiForgoryToken
IPrincipal

我试过:

  • AntiForgeryConfig.suppressIdentityEuristicChecks=true在应用程序_Start()中

  • 我已经参考了这个链接

  • 如何修复此错误

    提前感谢。

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

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

    因此,您要保护的所有其他post操作都应该使用
    [Authorize]
    [ValidateAntiForgeryToken]
    属性修饰它们。然而,loginpost方法不需要这些属性中的任何一个


    更新:这是非常必要的。请参阅Stephen Muecke评论中的答案。

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

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

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

    可以在IIS管理器或web.config文件中更改此设置,如下所示

    <system.webServer>
        <security>
          <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
          </authentication>
        </security>
    </system.webServer>
    
    
    
    您是否将[ValidateAntiForgeryToken]属性放在登录操作上?如果是这样,请尝试删除它。是的,我在登录的post方法中添加了
    [ValodataAntiforyToken]
    ,但在只返回登录页面的get方法中没有添加。很有趣!!因此,如何保护登录和用户的凭据,因为您肯定需要登录方法上的令牌,我建议您阅读“感谢您的回答”,并尝试以下内容:)。