2010-09-28 1 views
2

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

Конечные точки сертификата должны указывать на определенный сертификат в хранилище, поэтому работа будет работать только для одного конкретного клиента. Мысль состоит в том, что наш стандартный сервис может жить в http://mysite.com/MyService.svc, а конечные точки сертификата будут примерно такими же, как http://mysite.com/MyService.svc/Acme. Вызывает беспокойство то, что я фактически помещаю наш список клиентов в наш WSDL, что нежелательно.

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

ответ

0

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

1

Настройте поведение службы, как:

 <behavior name="CertBeh"> 

      <serviceCredentials> 

       <clientCertificate> 

        <authentication certificateValidationMode="PeerTrust" /> 

       </clientCertificate> 

      </serviceCredentials> 

     </behavior> 

PeerTrust сообщает WCF, чтобы посмотреть, если сертификаты, предоставленные клиентам в TrustedPeople магазине. Поэтому поместите все клиентские сертификаты в хранилище в поле, где находится ваш сервис, и все будет в порядке. См. this article для других возможных вариантов.