【问题标题】:Secure MVC Web API Controller [closed]安全 MVC Web API 控制器 [关闭]
【发布时间】:2017-04-26 15:15:31
【问题描述】:

如果我的 MVC 应用程序中有一个 Web API 控制器,并且我通过 jQuery $ajax 向它调用 GET 请求,我如何验证调用以确保它来自我的应用程序?

我需要检查它来自的 IP 吗?我可以使用 AntiForgeryToken 吗?

我基本上希望 API 控制器只允许来自我的应用程序的请求,而不是来自只知道端点的其他人的请求。我不希望人们能够复制 API 调用。

【问题讨论】:

  • 你读过“同源政策”吗?
  • 我读了一点。听起来我想使用的是 antiforgerytoken,但我不太明白为什么其他人不能复制它
  • 可能想研究使用 JWT 或其他一些基于令牌的验证系统。另见stackoverflow.com/q/11476883/215552

标签: javascript jquery asp.net-mvc api asp.net-mvc-5


【解决方案1】:

您可以使用 CORS 来限制来自其他来源的呼叫。除了 CORS,您还应该使用身份验证保护 api(以防止未经身份验证的访问)。

要禁用来自不同来源的请求,您可以在您的 web api (web api 2) 上使用 [DisableCors] 属性示例如下。默认情况下,CORS 被禁用。如果它在较高级别(前控制器)启用并且您想在较低级别(ex-action)进行限制,则应使用此属性

[DisableCors]
public class UsersController : ApiController
{
    public HttpResponseMessage GetUser(int id) { ... }
}

启用从http://contoso.com 访问此控制器

[EnableCors(origins: "http://www.contoso.com", headers: "*", methods: "*")]    
public class UsersController : ApiController
{
   public HttpResponseMessage GetUser(int id) { ... }
}

【讨论】:

  • 做 [DisableCors] 和使用防伪令牌有什么区别?
  • CORS 和防伪是不同的概念。 CORS 限制了可以访问您的 api 的域。防伪令牌由服务器生成,通过 cookie 和隐藏字段发送给客户端,以验证表单帖子来自受信任的来源。防伪是否足够,取决于您的应用程序的架构。如果您使用基于 MVC 的应用程序,其中响应是带有表单的 html 页面,那么防伪非常有用。如果您使用 web api,则无法使用防伪。此外,如果您希望 api 接受来自一组域(或不同域)的请求,则使用 CORS 来限制域。
猜你喜欢
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2014-06-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多