Asp.net web api ValidateAntiForgeryToken如何与可通过Web或本机应用程序访问的Web API相匹配?

Asp.net web api ValidateAntiForgeryToken如何与可通过Web或本机应用程序访问的Web API相匹配?,asp.net-web-api,antiforgerytoken,Asp.net Web Api,Antiforgerytoken,我试图了解我将如何使用ASP.NET Web API制作API,该API将受到保护,同时仍然可以从非Web环境(例如本机移动应用程序)访问 我的第一个想法是,非web环境永远无法成功通过防伪令牌验证,因为它没有发布的表单。这是真的吗?有没有办法让验证工作顺利进行 如果没有验证的方法,我的第二个想法是提供一个API,用于验证web调用的防伪令牌,但不用于非web调用。然而,似乎攻击者也可以轻松地使用此“非web”API进行CRSF攻击,对吗 非web API是否只需要支持非web身份验证机制(OA

我试图了解我将如何使用ASP.NET Web API制作API,该API将受到保护,同时仍然可以从非Web环境(例如本机移动应用程序)访问

我的第一个想法是,非web环境永远无法成功通过防伪令牌验证,因为它没有发布的表单。这是真的吗?有没有办法让验证工作顺利进行

如果没有验证的方法,我的第二个想法是提供一个API,用于验证web调用的防伪令牌,但不用于非web调用。然而,似乎攻击者也可以轻松地使用此“非web”API进行CRSF攻击,对吗

非web API是否只需要支持非web身份验证机制(OAuth?),这样就不能通过浏览器重播对它的请求?还是有更简单的方法


如果这是唯一的方法,是否有一种简单的方法可以关闭所有不安全的身份验证机制?ASP.NET Web API中不应该有一个简单/愉快的路径来支持这些场景吗?

看看最新MVC4更新中的SPA模板。他们有一个针对Web API的反CSRF示例实现。

看看针对Web API的CORS实现


然后,您可以只允许localhost作为webapi服务器上的有效URI。这将阻止其他站点在浏览器中加载攻击代码。

只有在使用持久身份验证机制(如cookies、basic auth、NTLM等)时,CSRF才会成为问题。Mike Wasson已经在Javascript中使用CSRF对抗webapi,我在DelegatingHandler中看到过版本

由于CSRF只是web场景中的一个问题,所以您可以争辩说,没有必要检查非web请求。来自浏览器的每个ajax请求,无论是通过jquery、本机XmlHttpRequest类还是带有头-X-Requested-with的任何东西,其值都是XmlHttpRequest。因此,您可以将CSRF检查限制为仅包含该标头的请求,因为任何不包含该标头的请求都必须来自浏览器外部


话虽如此,如果您正在进行身份验证,我将研究某种共享机密或OAuth机制,并使用DelegatingHandler服务器端进行验证,在web应用程序中,只需将令牌放在可以通过javascript获取并通过X-Authentication头发送的位置,因为它不是持久性的,需要附加到每个请求(就像CSRF令牌一样),所以没有CSRF问题。Dominick和以往一样,这类事情做得很好。

我已经有了一个反CSRF的实现(通过DotNetNuke服务框架),我只是想了解它如何/如果与本机应用程序一起工作。我在SPA模板中看不到任何东西,如果没有AJAX或form POST,它们的API将无法工作。限制到localhost似乎对本机移动应用程序没有帮助,对吗?我使用的是phonegap,它在客户端本地运行。据我所知,“X-Requested-with”头不会放在本机请求中,只有像jquery这样的框架才能使用