Идентификация идентификатора клиента WCF - PullRequest
7 голосов
/ 19 июля 2010

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

Мне нужен мой бэкэнд, чтобы можно было идентифицировать и различить, какой клиент wcf сделал вызов некоторой вариантной логике.

Есть ли способ, с помощью которого моя служба WCF может идентифицировать подключенных к ней клиентов? Также есть ли способ использовать подписанный ключ, чтобы предотвратить подделку клиентом своей личности?

Ответы [ 2 ]

15 голосов
/ 19 июля 2010

Вы можете решить эту проблему с помощью пользовательского заголовка.

Пользовательский заголовок можно добавить как часть конечной точки в файл конфигурации клиентского приложения. Затем вы бы сделали свой заголовок каждого клиента другим. Например, в версии ASP.NET:

        <endpoint
            name="basicHttpEndpoint"
            address="http://localhost:8972"
            binding="basicHttpBinding"
            contract="MySeriveContractLib.IMyService"
            >
            <headers>
                <ClientIdentification>ASP_Client</ClientIdentification>
            </headers>
        </endpoint>

Тогда служба может проверить значение заголовка следующим образом:

public void MyServiceMethod()
{
   var opContext = OperationContext.Current;
   var requestContext = opContext.RequestContext;
   var headers = requestContext.RequestMessage.Headers;
   int headerIndex = headers.FindHeader("ClientIdentification", "");
   var clientString = headers.GetHeader<string>(headerIndex);
   if clientString=="ASP_Client"
   {
       // ...
   }
   else
   {
      // ...
   }
}
3 голосов
/ 19 июля 2010

Чтобы определить тип вызывающего абонента (ASP.NET против WInforms и т. Д.), Вам, вероятно, необходимо добавить собственный заголовок к сообщениям WCF - сервис не может ничего узнать о вызывающем клиенте, если он не является его частью.сообщения или отправленных заголовков.Для этого лучше всего написать инспектора сообщений WCF - и этот блог здесь покажет вам, как это сделать.

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

Гуру WCF Ювал Леви написал действительно хорошую статью о журнале MSDN Декларативная безопасность WCF , в которой описываются пять распространенных сценариев безопасности в WCF и способы их реализации.Настоятельно рекомендуется к прочтению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...