NTLM Api 访问 Node.js
NTLM Api access with Node.js
完全免责声明:我以前从未使用过 Microsoft 的 NTLM。
我已经尝试了大约 30 种不同的方法来访问本地 TFS 实例上的 7Pace timetracker API。我知道如果我直接访问 Chrome 中的 URI,它会提示我进行 AD 登录,并迅速为我提供所有请求的数据。 Postman 也一样,只是提前有一个 NTLM 的身份验证选项卡。
Postman 建议 Node.js 使用请求:
var request = require("request");
var options = {
method: 'GET',
url: 'http://TFSURL/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);
});
这个returns没什么。注意授权 header。我已经测试了类似的多个不同变体。我的下一个猜测是通过 Chrome 请求,然后用 Tellerik Fiddler 嗅探它并尝试复制 header。我也这样做过,但无济于事。我最终得到了与上面非常相似的结果,除了 chrome 使用协商:
关于如何解决这个问题有什么想法吗?也许其他调试选项?
您需要完成 NTLM 身份验证的 3 个步骤。如果您想手动执行它并不容易,因为 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);
});
完全免责声明:我以前从未使用过 Microsoft 的 NTLM。
我已经尝试了大约 30 种不同的方法来访问本地 TFS 实例上的 7Pace timetracker API。我知道如果我直接访问 Chrome 中的 URI,它会提示我进行 AD 登录,并迅速为我提供所有请求的数据。 Postman 也一样,只是提前有一个 NTLM 的身份验证选项卡。
Postman 建议 Node.js 使用请求:
var request = require("request");
var options = {
method: 'GET',
url: 'http://TFSURL/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);
});
这个returns没什么。注意授权 header。我已经测试了类似的多个不同变体。我的下一个猜测是通过 Chrome 请求,然后用 Tellerik Fiddler 嗅探它并尝试复制 header。我也这样做过,但无济于事。我最终得到了与上面非常相似的结果,除了 chrome 使用协商:
关于如何解决这个问题有什么想法吗?也许其他调试选项?
您需要完成 NTLM 身份验证的 3 个步骤。如果您想手动执行它并不容易,因为 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);
});