Наилучшая практика для выставления нескольких клиентских конечных точек в службе WCF? - PullRequest
2 голосов
/ 28 сентября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

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

       <behavior name="CertBeh">

            <serviceCredentials>

                <clientCertificate>

                    <authentication certificateValidationMode="PeerTrust" />

                </clientCertificate>

            </serviceCredentials>

        </behavior>

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

0 голосов
/ 28 сентября 2010

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

...