Проверка звонящего / сервера в WCF - PullRequest
0 голосов
/ 01 февраля 2011

Мой сценарий:

  • Многие клиенты WCF, которые находятся в средах, находящихся вне моего контроля
  • Сервер будет либо моим, либо в среде вне моего контроля

Так что в худшем случае клиент и сервер находятся вне моего контроля.В частности, я могу предположить, что кто-то, размещающий этот код, может попытаться злонамеренно выдать себя за сервер или за клиента (скорее всего, за сервером).Однако клиент должен проверить, что сервер - это мой код, а сервер должен проверить, что клиент - это мой код.Я видел все рекомендации по использованию сертификатов;тем не менее, является ли этот вариант заданным в моем сценарии?

Один из подходов, которые я рассмотрел, заключается в написании IClientMessageInspector и IDispatchMessageInspector для установки и проверки пользовательского заголовка SOAP с обеих сторон.Я бы создал подпись HMAC на основе секретного ключа, содержащегося в исходном коде (предположим, у меня есть способ сохранить это скрытым), а затем проверил бы дайджест, основанный на теле сообщения.

Мне кажется, это будет работать;Тем не менее, я чувствую, что может быть что-то более нестандартное, что мне здесь не хватает.Я близко, совсем не в курсе?Спасибо за любое руководство!

Ответы [ 2 ]

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

Сертификаты, безусловно, способ пойти в вашей ситуации.

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

Сервер также сможет аутентифицировать клиентов, запрашиваякаждый клиент должен предоставить сертификат (сервер может проверить конкретного эмитента сертификата - в этом случае вашего собственного эмитента).

Теперь вам просто нужно правильно управлять / защищать свой сервер сертификатов, чтобы он не был скомпрометирован.

0 голосов
/ 01 февраля 2011

Я не думаю, что есть что-то из коробки, чтобы сделать это просто потому, что для сервера является необычным требованием проверять, что код на клиенте, вызывающем службу, является авторизованным кодом.

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

  1. Сервер имеет сертификат, а служба использует SSL - таким образом клиенты уверены, что они подключаются к правильному серверу.
  2. Клиенты предоставляют серверу подробности аутентификации (например, имя пользователя / пароль, сертификат и т. Д.), Чтобы сервер знал, что подключающемуся клиенту можно доверять.

Вы пытаетесь сделать дополнительный шаг, чтобы убедиться, что проверены не только пользователи / машины, но также и то, что проверен выполняемый код - это просто избыточно. Если выполняемый код не проверен, либо:

  1. Одна из машин была взломана, и в этом случае вам нужно беспокоиться о более серьезных проблемах.
  2. Один из ваших пользователей написал код против вашей службы и использует его «незаконно». Это не должно быть проблемой, если ваша служба позволяет только авторизованным пользователям выполнять «опасные» операции.
...