Передача информации о клиенте через веб-сайт в службу WCF Rest

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

Вот сценарий:

  • Веб-сайт ASP.NET работает на веб-сервере, который находится в нашей зоне периметра.
  • Приложение службы WCF работает на сервере приложений за брандмауэром в нашей внутренней сети.
  • Клиент (пользователь) может быть в нашей внутренней сети или в Интернете, когда он / она просматривает веб-сайт.
  • Сайт вызывает веб-сервис для запроса различной информации или для выполнения определенных задач.
  • Веб-сервису нужна информация о клиенте для выполнения этих операций.

Примечание: веб-сайт использует проверку подлинности с помощью форм и НЕ выдает себя за пользователя. Таким образом, передача идентификационной информации или текущей информации о культуре с использованием расширяемости WCF (поведение, инспекторы и т. Д.) Дает нам только идентичность и культуру веб-сервера, а не фактического клиента.

Какие-либо предложения?

1 ответ

Решение

Это похоже на случай федеральной безопасности.

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

Вы передаете этот билет сеанса своим вызовам REST, а принимающий сервер декодирует билет, чтобы получить необходимую ему информацию. Если билет недействителен (не расшифрован, не устарел или не имеет необходимых прав), серверный метод отклоняет операцию и возвращает статус 401 "Неавторизованный HTTP".

Чтобы реализовать это, вы можете положиться на реализацию Microsoft ( wsFederationHttpBinding) или накатить свою собственную, что обычно требует меньше усилий.

Еще одно примечание: для генерации и аутентификации билетов вы можете создать другую службу, которая находится за вашим 2-м межсетевым экраном, или вы можете использовать DLL-библиотеку в памяти... Но убедитесь, что генерировать заявку нелегко в случае, если веб-сервер скомпрометирован.

Другие вопросы по тегам