node.js - 使用 Node.js 访问 NTLM Api

标签 node.js rest authentication ntlm

完全免责声明:我以前从未使用过 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);
});

这不会返回任何内容。请注意授权 header 。我已经测试了类似的多种不同变体。我的下一个猜测是通过 Chrome 请求,然后用 Tellerik Fiddler 嗅探它并尝试复制 header 。我也这样做过,但没有效果。我最终得到了与上面非常相似的结果,除了 chrome 使用协商: enter image description here enter image description here

关于如何解决这个问题有什么想法吗?也许还有其他调试选项?

最佳答案

您需要完成 NTLM 身份验证的 3 个步骤。如果您想手动执行此操作并不那么容易,因为 NTLM 规范并未真正开放。

您可以使用 Node.js 模块:https://www.npmjs.com/package/httpntlm (免责声明:我创建了它)

要获取您的网址,您需要以下内容:

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);
});

关于node.js - 使用 Node.js 访问 NTLM Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302948/

相关文章:

javascript - 使用 Node.js 中的 API 调用清除 Cloudflare 缓存

javascript - "Can' t wait without a Fiber”查询数据库时出错?

javascript - 在 HTML 文档中存储对象 ID : id vs data-id vs?

authentication - 每当声明停止请求时,HasAnyAuthority 总是让我进入 api

node.js - “npx create-react-app appname” 不工作

java - 使用 rest web 服务的 spring security 登录

rest - http 使用 application/json 内容类型发布 map 对象

mysql - 登录注销考勤时间

asp.net - ASP.NET网站+ Windows窗体应用程序+ WCF服务:客户端凭据

node.js - Mongoose Population ObjectId 引用正在消失?