Asp.net AntiForgeryToken阻止用户登录某些移动设备

Asp.net AntiForgeryToken阻止用户登录某些移动设备,asp.net,asp.net-mvc,login,csrf,antiforgerytoken,Asp.net,Asp.net Mvc,Login,Csrf,Antiforgerytoken,我的过程很简单;用户使用登录表单登录。登录表单执行post,并定义@Html.AntiForgeryToken。在服务器上,操作方法定义[ValidateAntiForgeryToken]以验证提供的令牌。这是默认的microsoft帐户登录设置逻辑,对此没有太多更改 以下是一些用户遇到的错误: 防伪令牌用于用户“”,但当前用户为“” “用户名” 并阻止用户登录系统。这种情况只发生在某些移动设备上的某些用户身上,因此非常孤立。而且,它只是一个简单的登录;这并不像我在其他帖子中看到的那样,是一个非

我的过程很简单;用户使用登录表单登录。登录表单执行post,并定义
@Html.AntiForgeryToken
。在服务器上,操作方法定义
[ValidateAntiForgeryToken]
以验证提供的令牌。这是默认的microsoft帐户登录设置逻辑,对此没有太多更改

以下是一些用户遇到的错误:

防伪令牌用于用户“”,但当前用户为“” “用户名”

并阻止用户登录系统。这种情况只发生在某些移动设备上的某些用户身上,因此非常孤立。而且,它只是一个简单的登录;这并不像我在其他帖子中看到的那样,是一个非常奇怪的问题


为什么某些移动设备会拒绝这个?

< P>这主要是因为生成令牌的机制将读取当前用户名并将其视为输入,当生成防伪造令牌值时,通常是空白用户名,在登录完成之前。

当用户成功登录时,现在用户名值有一个“值”,因此旧令牌将无法通过asp.net运行时执行的安全检查,因此将显示您提到的错误

一种方法是通过在全局文件中向应用程序添加以下行来禁止应用程序忽略将用户名作为生成令牌的一部分:


AntiForgeryConfig.suppressIdentityEuristicChecks=true。

由于用户名是加密密钥唯一的原因,您是否预见该决定会带来任何安全隐患。。。这似乎是奇怪的是,它确实为一些用户,但不是别人。我认为这里唯一可实现的安全问题是一样的,如果你认为用户名作为输入的一部分。任何攻击者都需要获得两种访问权限:您的
AntiForgeryToken
值以及您的耦合Cookie。没有这个正确的组合,你应该是安全的。