【问题标题】:mvc web api only allow requests from same servermvc web api 只允许来自同一服务器的请求
【发布时间】:2017-07-20 19:19:38
【问题描述】:

我正在构建一个 mvc 应用程序,并且我正在制作一个 api 控制器以允许来自我的一些前端页面的 ajax 请求。我想将 api 控制器操作限制为只允许来自我的服务器的请求(这样人们就不能从他们自己的站点调用我的 api)。

经过一番搜索,我发现了许多提出自定义授权属性的解决方案,我做了:

public class LocalRequestOnlyAttribute : AuthorizeAttribute
    {
     protected override bool AuthorizeCore(HttpContextBase context)
            {
                return context.Request.IsLocal;
            }
}

然后用[LocalRequestOnly]将它放到我的控制器操作上

它在 localhost 上工作正常,但在我的 aws 服务器上,它不起作用,ajax 请求作为错误返回

编辑 - 详细信息:

我正在使用带有相对路径的主机名。所以我的 ajax 调用 url 是“/api/getdata”。 我没有设置任何 ajax 请求标头。 我回来的错误是No 'Access-Control-Allow-Origin' header is present on the requested resource.

【问题讨论】:

  • 您有更多信息吗?你是用ip还是主机名连接? AJAX 请求标头是什么样的?返回的错误是什么?
  • 添加细节

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


【解决方案1】:

我不知道如何解决该问题,但您的解决方案不起作用,因为 IsLocal 没有达到您的预期。这是它的文档:https://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal(v=vs.110).aspx

IsLocal 检查客户端和服务器是否在同一台计算机上。因此,如果您在亚马逊服务器上浏览 chrome,这将起作用。您要做的是防止跨域请求。

【讨论】:

    【解决方案2】:

    你不需要做任何事情。默认情况下,Web API 只允许来自同域的请求,不支持 CORS。

    【讨论】:

    • @blubberbo,我不确定邮递员,以前从未使用过。您可以简单地使用 jquery 创建一个简单的 html 页面,尝试使用 jQuery.ajax 在该页面内调用您的 web api。我相信您无法访问该 api。
    【解决方案3】:

    您无法阻止它,因为 Http 是无状态的,并且唯一检查请求是 ajax 还是来自您的服务器或站点的方法是使用 Http 标头,但这些标头不可信,因为它们可以通过服务器端编码手动设置。

    但是,通过禁用 CORS 并检查这些 Http 标头,例如 Referer(包含发出 ajax 请求的网页的地址)、User-Agent 和 X-Requested-With(对于 ajax 请求设置为 XMLHttpRequest )。

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多