javascript — автоматическая отправка формы на сайт HTTPS, как пройти аутентификацию?

Я работаю над сценарием для автоматизации подачи заявок в нашу систему поддержки. Пока что это очень простая, но работающая система. У меня есть страница с формой, которая автоматически отправляет через JavaScript со значением формы на основе запрошенного URL.

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

Идея, однако, заключается в том, чтобы запустить эту автоматическую отправку по расписанию или запустить ее удаленно, когда инициатор не обязательно будет человеком и не будет следовать отправке формы, чтобы присматривать за ней с помощью вкусных файлов cookie для аутентификации.

Так что, будучи новичком в этой области, мне кажется, что у меня есть варианты: а) погрузиться и запутаться, прослушав ответ на автоматическую отправку, определить, возвращается ли страница входа в систему, и отправить некоторые учетные данные через JS (не так уж много). поскольку эта автоматизация будет выполняться исключительно на защищенном сервере), затем повторно отправьте форму … или B) каким-либо образом сделайте это надлежащим образом, предварительно проверив аутентификацию. Но на этом мои знания заканчиваются.

Я прочитал этот похожий вопрос, но я все еще терплю неудачу. Возможна ли эта надлежащая автоматизация только в том случае, если рассматриваемый сервер поддерживает некоторую форму API токен-аутентификации? Нет ли более прямого способа подключения и запроса / отправки данных на сайт HTTPS? Я замалчивал некоторые введения в cURL, но еще не углубился.

NB. У меня нет прямого доступа к базе данных тикетов, коду или к процессам / учетным записям веб-сервера, на которых она выполняется. я наверное может запускать процессы на одной и той же машине, поэтому я не особо обеспокоен безопасностью автоматической отправки учетных данных, но, вероятно, это так.

0

Решение

Во-первых, если ваша система заявок направляет вас на экран входа в систему, если вы еще не прошли проверку подлинности, не имеет ничего общего с HTTPS — это будет либо имя пользователя / пароль <form> который затем устанавливает cookie, или это будет WWW-Authenticate заголовок. Каждый из них может использоваться независимо от того, используете ли вы HTTPS или обычный HTTP.

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

Однако, если вы делаете это из сценария, такого как Node.js, Python, PHP или чего-то еще, что может делать произвольные HTTP (S) -просмотры, вы можете захотеть посмотреть на такой поток:

  1. Запросить страницу индекса системы тикетов
  2. Определите, дал ли он вам экран входа
  3. Если это так, извлеките все необходимые данные с экрана входа (например, одноразовый номер) и сделайте запрос POST, как если бы вы сами вводили имя пользователя / пароль
  4. Убедитесь, что аутентификация прошла успешно (на основе ответа POST)
  5. Сохраните cookie, возвращенный вашим запросом POST, и используйте его для отправки билета.

Для более простого случая, когда система использует WWW-Authenticate заголовок это будет так:

  1. Запросить страницу индекса системы тикетов
  2. Определить WWW-Authenticate заголовок в HTTP 401 ответ получен
  3. Отправить Authorization заголовок с соответствующим значением
  4. Убедитесь, что аутентификация прошла успешно (на основе получения HTTP 200 вместо HTTP 401)
  5. Отправить то же самое Authorization Заголовок еще раз при отправке заявки.

С помощью WWW-Authenticate описано в Википедии для основной а также дайджест аутентификация.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]