Могу ли я настроить IP-фильтр для службы WCF?

Я изменяю свой API-интерфейс WCF, чтобы включить новый сервис, который должен быть открыт только для внутренних IP-адресов. Все сервисы в моем API доступны в SOAP, POX и JSON. То, что я ищу, - это поведение или что-то, что позволяет мне реализовать простой фильтр IP-адресов, обрабатывать запросы от внутренних IP-адресов и отказывать во всем остальном. Я бы хотел, чтобы он работал в конфигурации, потому что все остальные сервисы в API должны оставаться доступными для Интернета. Я немного погуглил, но не могу найти ничего подобного встроенному в WCF. Я что-то пропустил?

2 ответа

Решение

Хорошо, я понял это, и, по-моему, это выглядит как пятно. Я реализовал систему IP Filter в качестве поведения службы, а затем добавил ее в свою службу в файле web.config. Вот мой новый раздел поведения веб-конфигурации:

<serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    <behavior name="RestrictedServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <IPFilter filter="172.*.*.* 127.0.0.1" />          
    </behavior>
  </serviceBehaviors>

Класс IPFilter реализует IDispatchMessageInspector, чтобы как можно быстрее перехватить запрос, проверить IP-адрес клиента и выдать исключение, если оно не соответствует фильтру. Если кому-то интересно, могу выложить свой код.

Если ваша служба размещена в IIS, то вы можете сделать это с IIS для каждого веб-сайта (возможно, для каждого приложения, но я не знаю).

Другие вопросы по тегам