NTLM Api доступ с Node.js - PullRequest
0 голосов
/ 14 ноября 2018

Полный отказ от ответственности: я никогда раньше не работал с Microsoft NTLM.

Я пробовал около 30 различных способов доступа к API 7Pace timetracker в нашем локальном экземпляре TFS. Я знаю, что это работает, если я получаю доступ к URI непосредственно в Chrome, он запрашивает у меня логин AD и быстро предоставляет мне все запрошенные данные. То же самое для Почтальона, но есть вкладка аутентификации для NTLM заранее.

Почтальон предлагает это для Node.js, используя запрос:

var request = require("request");

var options = {
 method: 'GET',
 url: 'http://tfs2:8090/api/FlexPOS%20APS/odata/TimeExport%28StartDate=%272018-11-14%27,EndDate=%272018-11-14%27%20,PopulateTopParentColumns=null,GroupTimeByDateByUser=null,IncludeBillable=null%29',
headers: {
 'cache-control': 'no-cache',
  Authorization: 'NTLM NOTTHEREALTOKENKJASDKLHWKLLASBEDBSDAOBAW' 
 }
};

request(options, function (error, response, body) {
  if (error) throw new Error(error);
  console.log(body);
});

Это ничего не возвращает. Обратите внимание на заголовок авторизации. Я протестировал несколько разных вариантов похожих. Следующим моим предположением было сделать запрос через Chrome, затем прослушать его с помощью Tellerik Fiddler и попытаться скопировать заголовки. Я тоже это сделал, но безрезультатно. В итоге я получаю результат, очень похожий на приведенный выше, за исключением того, что в chrome используются переговоры: enter image description here enter image description here

Есть идеи, как это сделать? Может быть, другие варианты отладки?

1 Ответ

0 голосов
/ 15 ноября 2018

Вам потребуется выполнить 3 шага аутентификации для NTLM.Это не так просто, если вы хотите сделать это вручную, поскольку спецификация NTLM на самом деле не открыта.

Есть модуль Node.js, который вы можете использовать: https://www.npmjs.com/package/httpntlm (заявление об отказе: я его создал)

Чтобы получить ваш URL, вам понадобится следующее:

var httpntlm = require('httpntlm');

httpntlm.get({
    url: "http://tfs2:8090/api/FlexPOS%20APS/odata/TimeExport%28StartDate=%272018-11-14%27,EndDate=%272018-11-14%27%20,PopulateTopParentColumns=null,GroupTimeByDateByUser=null,IncludeBillable=null%29",
    username: 'your username',
    password: 'your password',
    workstation: 'anything',
    domain: ''
}, function (err, res){
    if(err) return err;

    console.log(res.headers);
    console.log(res.body);
});
...