Могу ли я настроить 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 для каждого веб-сайта (возможно, для каждого приложения, но я не знаю).