winforms - 在 Winform 和 WebAPI 中处理 AntiForgery Token

标签 winforms asp.net-web-api antiforgerytoken

在从非浏览器客户端(例如 WinForm)调用时,处理具有 ValidateAntiForgeryTokenAttribute 属性的方法的防伪的最佳方法是什么?

据我所知,以下是防伪的工作原理:

  1. 一个隐藏的输入字段被添加到页面,例如

  2. 同名的cookie也被发送到客户端

  3. 在下一个请求中,cookie 和隐藏的输入字段都被发送到服务器。服务器调用 AntiForgery.Validate(token, cookie) 来确认请求是合法的。

在网络应用程序中一切正常。它似乎在 WinForm 中不起作用。这是我所做的:

  1. 使用 HttpClient,我可以访问包含 token 的页面。
  2. 我解析页面并获取隐藏的输入字段。我也拿起 cookies 。
  3. 我按原样传递 cookie。最重要的是,我添加了一个新 header __RequestVerificationToken,其中包含来自隐藏字段的值。
  4. 我进入服务器代码。
  5. AntiForgery.Validate(xx,yy) 失败并出现错误: 提供的防伪 token 是给用户 X 的,但当前用户是 Y。

最佳答案

我想通了。它需要先完成表单例份验证,并在后续的 WebAPI 调用中传递 cookie。所以这是修改后的流程:

1) 使用 HttpWebRequest (GET) 加载登录表单

2) 使用凭据在登录表单上执行 POST。请在 HttpWebRequest 中提供 cookiecontainer

3) cookiecontainer 现在包含 Auth cookie 和 __RequestVerificationToken

4) 从任何后续 GET 或什至从登录结果的输出中获取 __RequestVerificationToken

5) 对于 WebAPI Post 调用,按原样传递 cookiecontainer。还包含一个 header __RequestVerificationToken,其值来自上一步。

关于winforms - 在 Winform 和 WebAPI 中处理 AntiForgery Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467804/

相关文章:

c# - Windows 7 跳转列表

c# - WinForms:DataGridView - 编程排序

c# - 解析从 Sitecore Item Web API 返回的 JSON

c# - 如何在 ASP.NET Core 的 HTTP GET 请求中使用 ValidateAntiForgeryToken?

c# - 防伪 token 无法解密 - 同一应用程序在同一服务器上多次使用 - 虚拟目录

asp.net - MVC 2 AntiForgeryToken - 为什么是对称加密 + IPrinciple?

c# - 应用程序未调用方法

javascript - 在 WebBrowser 控件中检测滚动到底部

c# - Asp.Net Web API 中带有字典参数的方法

javascript - Web Api 2 属性路由和 Angular JS 参数