Как запретить другим пользователям добавлять ссылку на службу размещенной службы wcf?

StackOverflow https://stackoverflow.com/questions/1243074

Вопрос

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

Можно ли это сделать с помощью регулирования сервиса или каковы другие способы достижения этой цели?

Это было полезно?

Решение

Нет, в WCF нет механизма, позволяющего определенным клиентам использовать ваш сервис и запрещающего другим.Вам нужно подойти к этому вопросу под другим углом.

Один из способов - не публиковать автоматически ваши метаданные из вашего сервиса, напримерсделайте его почти "невидимым" - а затем распространите необходимую информацию метаданных в виде одного или нескольких WSDL и одного или нескольких XSD-файлов среди тех клиентов, которых вы хотите подключить к своему сервису.Если ваши метаданные недоступны, кто-то, просто просматривающий ваш сервисный адрес, не получит никакой информации о том, куда звонить.

Обмен метаданными контролируется <serviceMetadata> поведение, а также наличие конечной точки "mex" в вашем сервисе.Удалите и то, и другое, и ваш сервис станет невидимым.

Другим способом было бы запретить любым внешним пользователям доступ к вашему серверу WCF на основе брандмауэров и сетевых правил.Это не может быть сделано WCF, но ваш сетевой администратор может ограничить, какие IP-адреса имеют физический доступ к компьютеру, на котором запущена ваша служба WCF.

Марк

Обновить:
Чтобы отправить метаданные тем пользователям, которые должны иметь возможность обращаться в вашу службу, вы можете сделать одно из двух:

1) Использование svcutil.exe /t:metadata (path+name of your service assembly), вы можете извлечь метаданные из вашей сервисной сборки (например, MyServiceLibrary.dll).Это даст вам один или несколько файлов WSDL и один или несколько файлов XSD, которые вам необходимо отправить вашим предполагаемым пользователям.Они могут поместить эти файлы куда-нибудь на свой жесткий диск, а затем в "Добавить ссылку на службу" вместо ввода URL-адреса для поиска службы они могут ввести имя основного WSDL (который импортирует все остальные файлы), и они получат свой клиентский прокси.

Или:

2) Когда служба запущена, вы можете "Добавить новый проект" в свое решение, выбрать библиотеку классов (MyService.Client), затем выполните команду "Добавить ссылку на службу" и введите URL-адрес вашей службы.Это создаст все необходимые файлы и все остальное в вашей новой библиотеке классов.Скомпилируйте эту библиотеку классов и отправьте эту сборку MyService.Client.dll пользователям, которым вы хотите разрешить доступ к вашему сервису.

В обоих решениях вам не нужно включать обмен метаданными, и кто-то другой не может просто подойти к вашему сервису и получить всю информацию, необходимую для того, чтобы вызвать его.

Другие советы

Если вы хотите, чтобы некоторые клиенты могли использовать (или просматривать) вашу службу, а некоторым клиентам не разрешалось использовать (или просматривать) вашу службу, вам необходимо настроить аутентификацию в вашей службе, чтобы только клиенты, которым вы разрешаете, могли получать доступ (или просматривать) вашу службу.

Я не знаю всего вашего сценария, но безопасности транспорта с базовой аутентификацией, вероятно, будет достаточно.Чтобы включить отключение анонимного доступа в IIS, настройте IIS на использование базовой авторизации, а затем в наборе конфигурации привязки:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>


Установите привязку mex таким образом, чтобы использовать безопасную привязку вместо привязки mexHttpBinding по умолчанию.Вам также понадобится SSL-сертификат для вашего сайта (если вы используете wsHttpBinding).

Обновить:Вот пример, Пользовательская Защищенная Конечная точка метаданных это демонстрирует, как реализовать службу с защищенной конечной точкой метаданных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top