【问题标题】:Authenticating Zombie.js Browser against Windows Authentication针对 Windows 身份验证对 Zombie.js 浏览器进行身份验证
【发布时间】:2014-04-09 21:04:32
【问题描述】:

我能够在我的本地项目上使用 Zombie.js 运行我的 mocha 测试,但是在我们的一个开发服务器上尝试运行它时遇到 401 错误。

必须使用的开发服务器是 Windows Server 2003。这是一个组织选择,而不是我自己的选择。

此服务器具有应用程序需要所在的域的 Windows 身份验证,这就是我收到 401 错误的原因。

我尝试按照僵尸docs 的建议设置身份验证,如下所示:

browser.authenticate().basic("user", "password");

这不起作用。

有什么建议吗?

【问题讨论】:

  • 你为什么不直接使用 https 模块,因为它似乎也可以工作。
  • 我更新了上面的答案,但在应用程序所在的服务器上我别无选择。它必须在运行 IIS6 的 Windows 2003 服务器上。

标签: node.js iis mocha.js zombie.js


【解决方案1】:

Zombie.js 中的browser.authenticate().basic() 执行HTTP basic authentication。您的站点受 Windows 身份验证保护,即NTLM。这些是不同且不兼容的协议。您需要使用node-http-ntlm 之类的东西,并弄清楚如何在测试中插入它以便 Zombie.js 可以使用它建立的会话,或者扩展 Zombie.js 的身份验证功能以包含 NTLM。

【讨论】:

  • 谢谢,我希望这周晚些时候能够检查一下并让它正常工作。
【解决方案2】:

你可以试试这个代码

此外,该库还提供了用于对 NTLM HTTP 身份验证期间使用的标头进行编码和解码的辅助方法。这个功能目前应该被认为是实验性的。

source

// npm install ntlm request agentkeepalive

var url = "https://.../ews/exchange.asmx"
  , domain = ...
  , username = ...
  , password = ...

var ntlm = require('ntlm')
  , ntlmrequest = require('request').defaults({
    agentClass: require('agentkeepalive').HttpsAgent
  });

ntlmrequest(url, {
  headers: {
    'Authorization': ntlm.challengeHeader(hostname, domain),
  }
}, function(err, res) {
  ntlmrequest(url, {
    headers: {
      'Authorization': ntlm.responseHeader(res, url, domain, username, password)
    }
  }, function (err, res, body) {
    console.log(body);
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2016-12-14
    • 2012-03-06
    • 2020-01-14
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多