2012-02-08 89 views
7

我正在尝试使用Node.js来调用SOAP Exchange EWS服务。我创建了一个简单的HTTP客户端,像这样:Node.js与MS Exchange EWS集成

var https = require('https'); 

var username = 'user'; 
var password = 'password'; 
var auth = 'NTLM ' + new Buffer(username + ":" + password).toString('base64'); 

var options = { 
    host : 'exchangehost', 
    port : 443, 
    method : 'post', 
    path : '/Exchange.asmx', 
    headers : { Authorization : auth } 
}; 

var request = https.request(options, function(response) { 
    console.log('Status: ' + response.statusCode); 
}; 

request.write('<soapenv:Envelope ...></soapenv:Envelope>'); 
request.end(); 

我收到一个状态代码401,我怀疑是因为我没有做对参与NTLM身份验证(http://www.innovation.ch/personal/ronald/ntlm.html)的三个步骤。有谁知道Node.js模块直接与Exchange EWS通信或使用NTLM进行身份验证,还是需要为Node.js自己实现该协议?任何援助非常感谢。

+0

你有没有解决过这个问题? – 2014-04-16 05:23:55

+1

不幸的是我没有。我们决定采用Kerberos身份验证,部分原因是由于我们在这里遇到的问题。 – AngryMonkey 2014-04-26 17:23:12

回答

1

我已经使用node-ews成功与EWS进行通信。

node-ews在内部使用httpntlm进行NTLM身份验证。

我个人认为node-ews是你最好的选择,因为它已经实现了与EWS交互所需的一切。

+0

嗨亚伦,你有没有机会设法使用GetRoom功能?我试图让我的工作室的日历看到哪些是可用的 – 2016-11-25 16:26:38

+0

@RasmusBidstrup我还没有,但是,有几个步骤,你必须得到正确的。 1)在'node-ews'项目页面上,请求参见[issue#27](https://github.com/nmarus/node-ews/issues/27),可以很好地为请求创建JSON对象。 2)确保您使用的参数是有效的(如正确的电子邮件地址)。随意[创建问题](https://github.com/nmarus/node-ews/issues/new),我会尽力提供帮助。 – 2016-11-25 18:57:28

+0

谢谢:-)我对EWS正在使用的名称有些困惑,我需要找到一个房间的预约/会议(通过电子邮件或名称)是否正确,而不是日历? 我会提出一个案例来解释我所做的事情以及我卡在哪里。 – 2016-11-25 19:58:51

0

我发现了一个支持与Exchange 2010进行通信的Node.js模块,但是我仍然试图找出如何亲自使用它,文档很简单。 https://npmjs.org/package/exchanger

+0

谢谢,在没有模块的情况下寻找更多的直接方法。我会检查一下,看看模块是否工作。 – AngryMonkey 2013-07-01 21:49:15

+0

我尝试使用'交换器',但此刻'node-expat'出现错误,导致我无法进行进一步测试。 '错误:找不到模块'../ build/Release/node_expat.node'' – 2016-10-19 13:40:25

1

您是否尝试过httpntlm模块? https://github.com/SamDecrock/node-http-ntlm

+0

这看起来很有前途,很简单。我不想再这样做,但如果有人可以验证它的工作原理,我会将它标记为已接受,因为这似乎是一个更通用的NTLM连接器。 – AngryMonkey 2015-09-30 15:48:18

1

您是否试过ews-javascript-api npm模块,它具有您正在查看的所有功能+非常简单的使用ews-javascript-api-auth模块的ntlm身份验证。 NTLMv2也受支持。

我添加了这个答案,因为它会提供问题标题(集成)的完整答案。这些是github链接,问题很少,所以在github自述文件中提供的示例应该可以工作。

[免责声明 - 我是作者]