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

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

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

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

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

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

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


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

ОБНОВЛЕНИЕ: Вот пример, Настраиваемая конечная точка защищенных метаданных , которая демонстрирует, как реализовать службу с защищенной конечной точкой метаданных.

1 голос
/ 07 августа 2009

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

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

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

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

Марк

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

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

Или:

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

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

...