Как аутентифицировать вызовы WCF с использованием форм аутентификации и безопасности - PullRequest
3 голосов
/ 10 января 2011

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

Машина A

  • Веб-сайт интерфейса http://www.site.com
  • Сайт защищен паролем с помощью форм Аутентификация

Машина B

Машина C

Службы WCF на компьютере B и компьютере C должны проверить, что запрос от компьютера A был аутентифицирован. Как я могу проверить, что запрос аутентифицирован на разных машинах?

Меня интересует только то, что запрос аутентифицирован, и он не касается защиты тела сообщения (поскольку мы не отправляем конфиденциальные данные по проводам), поэтому SSL не требуется.

Какие методы аутентификации я могу использовать для описанного выше сценария?

Ответы [ 2 ]

5 голосов
/ 10 января 2011

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

Я бы, вероятно, использовал что-то вроде:

Сценарий низкого уровня безопасности:

Вы упомянули, что вы создаете распределенное приложение, поэтому, вероятно, между уровнями должно быть какое-то доверие (машина A - C).Разрешен ли анонимный доступ на машине А?Если нет, может ли ваш уровень на компьютере B доверять уровню на компьютере A, который аутентифицировал пользователей?То же самое с C и B?В таком случае вам вообще не нужно иметь дело с аутентификацией на машинах B и C, а вместо этого используйте безопасность Windows, чтобы разрешить доступ только к учетной записи, на которой запущен клиентский уровень (A - клиент B, B - клиент C).

Сценарий высокой степени безопасности:

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

Вы не будете выполнять прямую аутентификацию на компьютере A. Вместо этого пользовательский поставщик членства (или прямая проверка подлинности с помощью форм) на компьютере A вызовет службу аутентификации на компьютере B. Служба создасттокен для "сеанса безопасности".В зависимости от реализации, этот токен может использоваться только для связи между A и B (вы должны сохранить его в сеансе) или для всей связи между клиентом, A и B (вы передадите его в cookie).Машина C доверяет Машине B. Это может быть расширено до полного федеративного сценария.

Это не предотвратит перехват сеанса (прослушивание cookie с токеном между клиентом и машиной A - во избежание этого вам потребуется HTTPS между клиентом и A), но без токена хакер может сделать что-нибудь на вашем компьютере B или C.1019 *

0 голосов
/ 10 января 2011

Типичной настройкой будет то, что машина A использует одного технического пользователя для подключения к службе WCF на машинах B и C. Для этого либо введите имя пользователя и пароль в файл конфигурации машины A, либо используйте проверку подлинности Windows, есливсе машины находятся в одном домене.

Машины B и C будут просто доверять машине A, что запрос был аутентифицирован.

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