Лучшая практика для предоставления нескольких клиентских конечных точек в службе WCF?

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

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

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


person Shawn Hubbard    schedule 28.09.2010    source источник


Ответы (2)


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

person Ladislav Mrnka    schedule 28.09.2010

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

       <behavior name="CertBeh">

            <serviceCredentials>

                <clientCertificate>

                    <authentication certificateValidationMode="PeerTrust" />

                </clientCertificate>

            </serviceCredentials>

        </behavior>

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

person UserControl    schedule 13.02.2011