我正在为部署在Azure中的MVC应用程序实现ValidateAntiForgeryToken。
1)我在主页面中添加了@ Html.AntiForgeryToken()。
2)我正在使用Jquery $ .Post为Post动作发送数据这是代码
`var token = $('[name=__RequestVerificationToken]').val();
var url = '/XX/YYYY/';
$.post(url, { __RequestVerificationToken: token,reportname: reportName},
function (data) { window.navigate(data.url) }
);`
我正在将令牌传递给服务器并在fiddler中看到,Cookie和隐藏变量被传递给服务器。
3)我用[HttpPost]& [ValidateAntiForgeryToken]
这在azure的DEV环境中完美无缺,但当我们进入不同的环境时,它会失败, 它抛出异常 “未提供所需的防伪标记或无效”
我观察到隐藏变量的值和cookie变量中的值是不同的。在我的开发环境中甚至是相同的,但它在开发环境中工作但不在测试中。请建议如何解决这个例外。
DEV和TEST azure站点的配置相同。
答案 0 :(得分:0)
我能够通过将ValidateAntiForgeryTokenAttribute类复制到我的解决方案中来追踪我的问题,并为此属性类添加必要的辅助方法,因为大多数类或密封或内部。因此,我必须复制代码并进行一些修改,以便在我的天蓝色环境中完美地工作。基本上,问题在于
AntiForgeryData.GetUsername(context.User)
此方法返回userName为null,因此我将justed修改为
string currentUsername = AntiForgeryData.GetUsername(context.User) ?? string.Empty;
然后它开始完美运行,在Azure中最近发生的设置发生在validateAntifogery发生的早期,所以这解决了我的问题。