在登录页面上覆盖防伪标记错误

Gar*_*lie 5 c# security authentication asp.net-mvc asp.net-mvc-5

我有一个网站收到大量以下错误:

提供的防伪令牌适用于与当前用户不同的基于声明的用户.

防伪cookie令牌和表单字段令牌不匹配.

如果防伪令牌不是针对用户但在登录页面上包含用户,我想阻止该站点抛出错误,例如:

提供的防伪令牌适用于用户"",但当前用户是"Garret".

我不希望此例外适用于登录页面以外的任何其他页面.所以我不想添加AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;到整个网站.我还想让网站尽可能安全,因为它包含HIPAA数据.我该怎么做才能保证它尽可能安全,但仍然试图在登录页面上防止这个错误,因为它使用户难以使用?

该站点托管在负载平衡服务器上,但我认为这不是问题.我认为错误主要是由于使用浏览器的后退按钮,在登录前打开登录页面一段时间,已登录或多次登录.还有一些用户通过可能没有加载页面的应用程序访问它,只是尝试发布登录信息.

所以,请让我知道在尽可能安全的同时防止登录页面出现此错误的最佳选择是什么?

Gar*_*lie 5

我最终做的,似乎仍然提供相同的安全性,是在检查用户是否登录后手动检查防伪令牌.

    [HttpPost]
    [AllowAnonymous]
    //[ValidateAntiForgeryToken]
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        // Skip the login process if the user is already logged in
        if (User.Identity.IsAuthenticated) 
        {
            return RedirectToAction("Index", "Home");
        }
        // Check the anti forgery token now
        System.Web.Helpers.AntiForgery.Validate();
        ...
Run Code Online (Sandbox Code Playgroud)