NodeJS - связь с сервером, который пытается аутентификацию ntlm, но сталкивается со странным поведением - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь написать код, который позволит моему серверу nodeJS очистить другой веб-сайт, который пытается запустить аутентификацию ntlm.Когда я прихожу на страницу, появляется всплывающее окно, в которое я должен ввести учетные данные для доступа к сайту.Тем не менее, это всплывающее окно, похоже, не является частью Chrome, а частью ОС;Что бы я ни пытался, я не могу найти его в элементах страницы, что заставляет меня думать, что это часть ОС.(Я использую Windows 10 на моей машине для разработки, но машина, на которой будет выполняться очистка, работает под управлением Linux).Еще одно свидетельство, которое у меня есть для этого, заключается в том, что когда я использую кошмар для приземления на сайт, всплывающее окно не появляется.

Я обнаружил, что это всплывающее окно является попыткой выполнить аутентификацию NTLM, я узнал об этом, зарегистрировав заголовкии нашел заголовок 'www-authenticate': 'Negotiate, NTLM'.

Я никогда раньше не делал аутентификацию ntlm, и провел множество исследований, консультируясь со многими статьями, в том числе:

  1. эта здесь, на stackoverflow
  2. документация Microsoft по http-аутентификации

Возможно, я просто неправильно понял, но из того, что я прочитал.NTLM-аутентификация - это протокол аутентификации, при котором сервер и клиент несколько раз обмениваются данными, требуя, чтобы клиент расшифровал запрос, который ему отправляет сервер, а клиент отправил ответ с собственным зашифрованным сообщением (в документации по Microsoft они упоминаются).в качестве ntlm сообщений типа 1, 2 и 3).После того, как клиент выполнил эти последовательные «рукопожатия», клиенту предоставляется токен, который должен быть помещен в заголовок авторизации всех будущих запросов, что позволит клиенту получить доступ к ресурсам в этом домене.

Но, когда я делаю запрос get (используя модуль запроса) и проверяю заголовок www-authenticate, я не вижу зашифрованного вызова base64, который мне нужно декодировать.Все, что он говорит, это «Вести переговоры, NTLM».Однако был отправлен еще один заголовок, который выглядит следующим образом 'set-cookie': ['PMPRSTTCKT=!lcWXt/hXXO4xZHh0zm3oec8PLsnWcoTFk3sxytyUFAh/vYSo90MBtWpKI48G5L7mFdWMteNN5Q2Khfo=; expires=Fri, 01-Mar-2019 21:06:12 GMT; path=/; Httponly; Secure'].Я не уверен, является ли этот cookie ошибочным вызовом, отправленным обратно с сервера, и это была просто плохая кодировка командой разработчиков или нет.

Насколько я понимаю, это не ожидаемое поведение для аутентификации ntlm.Я ожидаю, что этот заголовок будет содержать вызов.Кто-нибудь из вас имеет опыт аутентификации NTLM и может пролить некоторый свет на то, что здесь происходит?

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

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

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете использовать следующий модуль, который уже реализует протокол аутентификации ntlm в javascript / node.js: https://www.npmjs.com/package/httpntlm

...