Идентификация клиентского идентификатора WCF

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

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

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

7
задан Hady 18 July 2010 в 21:06
поделиться

2 ответа

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

Вы можете добавить настраиваемый заголовок как часть конечной точки в файл конфигурации клиентского приложения. Затем вы должны сделать индивидуальный заголовок каждого клиента другим. Например, в версии 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
   {
      // ...
   }
}
15
ответ дан 6 December 2019 в 10:47
поделиться

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

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

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

3
ответ дан 6 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: