【发布时间】:2013-01-06 05:30:08
【问题描述】:
在从非浏览器客户端调用时,在具有 ValidateAntiForgeryTokenAttribute 属性的方法上处理 Antiforgery 的最佳方法是什么,例如 WinForm?
据我所知,以下是防伪的工作原理:
一个隐藏的输入字段被添加到页面,例如
一个同名的cookie也被发送到客户端
在下一个请求中,cookie 和隐藏的输入字段都被发送到服务器。服务器调用
AntiForgery.Validate(token, cookie)确认请求合法。
在网络应用程序中一切正常。它似乎在 WinForm 中不起作用。这是我的工作:
- 使用
HttpClient,我可以访问包含令牌的页面。 - 我解析页面并抓取隐藏的输入字段。我也拿起饼干。
- 我按原样传递 cookie。最重要的是,我添加了一个新标题
__RequestVerificationToken,其中包含来自隐藏字段的值。 - 我进入服务器代码。
-
AntiForgery.Validate(xx,yy)失败并出现错误: 提供的防伪令牌是为用户 X 准备的,但当前用户是 Y。
【问题讨论】:
-
您在此序列中的哪个时间点进行身份验证? (如果有的话)。当您在身份验证之前检索令牌然后将令牌发回(这次是经过身份验证的会话)时,往往会发生此错误。
标签: winforms asp.net-web-api antiforgerytoken