WebApi服务需要CSRF cookie,但不应该?

时间:2015-11-18 18:14:26

标签: c# cookies asp.net-web-api csrf

我有一个WebApi服务已经工作了很长时间,但突然之间,它正在响应所需的防伪cookie“__RequestVerificationToken”不存在

此服务以前从未要求过这种服务,并且自从它工作以来唯一改变的是一个新的“HttpPost”功能被添加到控制器中并且有几个被删除了。我尝试过的事情:

  • 在我的startup.cs中,我有:

    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    
  • 评论该行,但没有变化。

  • 删除项目中对CORS DLL的所有引用,理论上无法抛出此错误?

  • 使用[DisableCors]装饰我的方法不起作用,但无法识别。

  • 重新启动服务器

  • IIS设置中的任何内容似乎都不会影响这一点。

  • 在调用服务的web.config中没有任何关于CORS的信息,或者错误信息。没有“requireSSL”或类似的东西,只是一个连接字符串和一些系统库。

这是从本地计算机调用的本地服务,在完整版本的IIS 7.5中运行。没有报告其他错误,并且以相同方式托管的类似服务不会引发此错误。

我对如何从请求中发布cookie不感兴趣,我需要关闭导致接收服务的任何内容。

2 个答案:

答案 0 :(得分:1)

如果您从MVC项目调用API,请尝试一下。它告诉API不要查找cookie,而是通过令牌使用传递的声明中的名称。您不需要传递令牌(尽管您应该),这只是告诉API不要查找cookie。

public void Configuration(IAppBuilder app)
{
    app.UseCors(CorsOptions.AllowAll);

    //let mvc know you are using a token and not a cookie like it expects
    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
}

答案 1 :(得分:0)

好的,问题是这从来就不应该是跨站点请求。我在问题中不清楚这一点,但这些服务都与调用者在同一个域上运行。所以,这应该是我的第一个线索 - 这不是跨站点请求,但服务认为它是。这导致我检查应用程序池中的IIS设置,并且看,一个服务指向错误的站点!它是在正确的应用程序池中,但它生活在一个不同的站点。修复它与调用者在同一站点中运行使其不是跨站点请求,并且不会发生此错误,并且它不需要任何令牌或cookie或其中任何一个。