Могу ли я настроить IP-фильтр для службы WCF?
-
05-09-2019 - |
Вопрос
Я изменяю свой WCF API, чтобы включить новую службу, которая должна быть доступна только для внутренних IP-адресов.Все сервисы в моем API доступны в SOAP, POX и JSON.То, что я ищу, - это поведение или что-то еще, что позволяет мне реализовать простой фильтр IP-адресов, обрабатывать запросы с внутренних IP-адресов и запрещать все остальное.Я бы хотел, чтобы это работало в конфигурации, потому что все остальные сервисы в API должны оставаться доступными в Интернете.Я немного погуглил, но не смог найти ничего подобного, встроенного в WCF.Я что-то упускаю?
Решение
Хорошо, я разобрался с этим, и, на мой взгляд, это довольно ловко.Я внедрил систему IP-фильтрации в качестве служебного поведения, затем добавил ее в свой сервис в 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 для каждого веб-сайта (возможно, для каждого приложения, но я не знаю).