Передача HTTP-сессии для стороннего сайта с сервера на клиент
Допустим, мое веб-приложение действует от имени пользователей, которые предоставляют свои учетные данные моему приложению, чтобы приложение могло выполнять вызовы API сторонней службе. Кстати, это для публикации предложений о товарах на стороннем сайте (немного похоже на eBay, но в меньшем масштабе).
Теперь одним из супер удобных способов упростить эту публикацию будет повторное использование сложной веб-формы, которую сторонний сервис должен принимать, предлагая продукты для аутентифицированных пользователей. Идея состоит в том, чтобы заполнить их веб-форму и перенаправить клиентский браузер на нее, чтобы пользователь мог редактировать вещи, используя сложную и знакомую веб-форму. Это будет лучший пользовательский опыт и наименьшая работа по внедрению.
Однако это не документированный способ сделать это. Более того, он не работает так просто, как заполнение полей формы из параметров запроса (GET или POST). Веб-форма просто не работает таким образом.
Там может быть альтернатива. Мое приложение может открыть сеанс со сторонним приложением от имени пользователя, отправить все данные, чтобы они были сохранены в его базе данных, а затем отправить браузеру пользователя все данные, необходимые для принятия сеанса, который мое серверное приложение открыло на своем компьютере. от имени. Обратите внимание, что я еще не пробовал это; и я считаю, что это может произойти сбой, если стороннее приложение привязывает сеанс к IP-номеру (что может сделать приложение, независимо от того, работает оно или нет).
Но было бы невозможно, чтобы серверная программа, открывающая сеанс HTTP, записывала всю информацию, необходимую для передачи этого сеанса, в документ HTML/Javascript и отправляла этот документ в браузер пользователя, где Javascript выполняет и собирает запрос, такой как составлено при использовании браузера на сторонней форме напрямую, что я наблюдал с помощью HttpFox?
Вся информация, это все HTTP; Очевидно, что невозможно передать IP-адрес сервера клиенту... Но все файлы cookie и параметры. Javascript, выполняемый в браузере, должен будет затем использовать информацию, которую я каким-то образом передаю в документе (вероятно, в части скрипта), для составления запроса на сторонний веб-сайт, который переходит прямо в сеанс, открытый серверным приложением., Это будет означать, что документ, исходящий из моего домена, установит куки (добавить заголовки запроса), чтобы браузер пользователя выполнял этот запрос.
Другими словами, технически возможно передать сеанс с сервера клиенту?
Как бы вы сделали это в Javascript?
Обновить
Согласно ответам на другой вопрос: Вы не можете установить куки для другого домена. Разрешение этого представило бы огромный недостаток безопасности. Идет, чтобы показать, что я не фронтенд-разработчик.
Пока не сдаюсь. Там есть XmlHttpRequest
объект. Может быть, этим можно злоупотреблять в моих злых целях?
Второе обновление
Итак, я экспериментировал с XmlHttpRequest
, Плохая новость (для меня и в данном конкретном случае): похоже, он не будет работать, используя XmlHttpRequest
либо потому, что (используя текущий Firefox) мои красиво подделанные запросы переписываются в соответствии с тем, что, по-видимому, станет стандартом W3C для перекрестного общего доступа к ресурсам, поэтому Cookie
заголовок просто удален, а заглушки заголовки Moin
а также Gurke
сводятся к Access-Control-Request-Headers: gurke,moin
, Теперь, честно говоря, это портит игру большое время. Я разочарован.
1 ответ
Хорошо, сдаюсь. То, что я хочу сделать, не возможно. Причиной этого является так называемая политика одного и того же источника, которая делает браузеры более безопасными. Смотрите этот другой ответ для некоторых указателей. И, похоже, я ошибся в своей оценке рабочего проекта W3C по совместному использованию ресурсов из разных источников, который позволяет делать исключения из политики того же происхождения. Так что, если бы это было широко реализовано, это могло бы быть жизнеспособным. Но в целом в этой попытке слишком много "если" и "неопределенностей".
Хехе. Получил это работает.:)
Файл cookie и идентификатор сессии, содержащиеся в нем, в конце концов не были нужны. Я выяснил, как получить все параметры, необходимые для этого запроса, и я предоставляю их клиенту, отправив ему форму автоматической отправки:
<body onload="document.forms[0].submit()">
<form action="..." method="post">
...
Затем клиент входит в свой собственный сеанс. Работает отлично. Пока они не меняют интерфейс. Я настроил тесты, чтобы отслеживать их форму и предупреждать меня о необходимости действий, которые они изменяют несовместимыми способами.