У меня есть веб-сервис WCF, который выставляет несколько бизнес-методов. У меня также есть два клиента - GUI asp.net и приложение миграции данных что оба подключения к wcf бэкенду для вызова различных деловых сделок.
Мне нужен мой бэкенд, чтобы смочь определить и различать, между которым wcf клиент позвонил некоторой различной логике.
Существует ли способ, которым мой сервис WCF может идентифицировать клиенты, подключенные к нему? Также существует ли способ использовать ключ со знаком, чтобы препятствовать тому, чтобы клиент имитировал их идентификационные данные?
Вы можете решить эту проблему с помощью настраиваемого заголовка.
Вы можете добавить настраиваемый заголовок как часть конечной точки в файл конфигурации клиентского приложения. Затем вы должны сделать индивидуальный заголовок каждого клиента другим. Например, в версии 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
{
// ...
}
}
Для определения типа вызывающего абонента. (ASP.NET против WInforms или что-то еще), вам, вероятно, потребуется добавить настраиваемый заголовок в свои сообщения WCF - служба никак не может узнать что-либо о вызывающем клиенте, если это не является частью сообщения или отправленных заголовков. Для этого лучше всего написать инспектор сообщений WCF - и это сообщение в блоге здесь покажет вам, как это сделать.
Что касается безопасности - зависит от вашего окружения. В корпоративной локальной сети за брандмауэром - используйте учетные данные Windows. Если вы находитесь «снаружи», лучше всего будет установить на клиентах цифровые сертификаты для проверки их личности.
У гуру WCF Ювала Леви есть действительно хорошая статья в журнале MSDN Magazine Declarative WCF Security , в которой описаны пять распространенных сценариев безопасности в WCF и способы их реализации. Настоятельно рекомендуется к прочтению.