如何保护仅允许来自特定主机的Web API

时间:2013-11-26 05:03:21

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

我公开了MVC WebAPI,并且只想接受来自127.0.0.1的请求。原因是将要使用此WebAPI函数的应用程序将托管在同一个WebAPI函数上 IIS服务器作为虚拟应用程序。

有人可以建议如何实现上述目标以及是否有更优雅的解决方案。

2 个答案:

答案 0 :(得分:1)

覆盖DelegatingHandler并编写一个自定义处理程序,它会检查请求的主机,如果符合您的条件,则继续或拒绝请求。

public class CustomHandler : DelegatingHandler
{     
   protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   {

    //check here for host of request
    if(!criteria)
    {
       request.Properties.Add("Forbidden", true);
    }

    return base.SendAsync(request, cancellationToken);
   }
}

WebApiConfig中将此处理程序注册为

public static void Register(HttpConfiguration config)
{
    config.MessageHandlers.Add(new CustomHandler());
}

答案 1 :(得分:0)

您是否需要通过自定义软件执行这些操作?


您可以将iis设置为仅绑定到内部地址(甚至可能更改端口),并确保服务器的防火墙不会公开该绑定。

你能否澄清想要这个的原因?如果您只绑定localhost并且不公开WebApi,则可以直接从代码中调用api方法。