【问题标题】:Asp.Net MVC4 stopping people requesting or posting data to my APIAsp.Net MVC4 阻止人们向我的 API 请求或发布数据
【发布时间】:2013-04-08 10:39:45
【问题描述】:

我希望能够在我的 MVC4 应用程序中使用 AJAX 获取/发布到 API 控制器。

但是,我不希望任何人能够设置网页并获取/发布到控制器 - 只能从从我的服务器交付的网页。

那么,我应该只使用普通控制器并返回数据,而不是 API 控制器吗? (或者我是否误解了使用 API 控制器会打开 Web 应用程序以访问任何 Get/Post?)

谢谢,马克

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-web-api security


【解决方案1】:

这可能与my question here 重复。简而言之,保护 API 端点的唯一方法是让客户端以某种方式进行身份验证。如果您使用 [Authorize] 属性装饰控制器/操作,则可以使用普通的 ASP.NET 身份验证 cookie 来完成此操作。您还可以使用 API 密钥或白名单 IP 地址推出自己的解决方案。 See this link 获取选项清单。

我对自己的问题发布的答案确实使我的网络应用程序的非消费者更难以调用 API 端点,尽管正如 Darin 指出的那样,它可以被规避。用户可以访问网络应用程序获取加密的 AnonymousID 和自定义加密 cookie,将它们插入 Fiddler2(或任何其他客户端),然后在 24-48 小时内尽可能多地访问 API。

【讨论】:

  • 感谢 Dan - 所以保护您的应用免受不需要的 Get/Posts 的唯一真正方法是在控制器上使用 antiforgerytoken,这意味着您必须有效地发布和返回视图 - 而不是而不是使用 API 或正常的“不受身份验证保护”控制器操作?
  • 这不是唯一的方法。与引用的另一篇文章一样,如果可行,您可以将 IP 地址列入白名单。此外,您不需要将视图从 POST 返回到 MVC 控制器。您也可以从它们返回 JSON 或 XML,使它们类似于 API。
  • 该应用程序是一个汽车租赁系统 - 所以任何公众都可能只是浏览以查看可用的内容,直到实际租赁 - 我不希望他们必须注册才能能够看看有什么可用的。再次感谢。
猜你喜欢
  • 2019-04-09
  • 2015-07-20
  • 1970-01-01
  • 2011-10-19
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多