2014-03-27 102 views
0

我能夠在本地項目上使用Zombie.js來運行我的摩卡測試,但在嘗試在我們的某個開發服務器上運行時出現401錯誤。對Windows認證的Zombie.js瀏覽器進行身份驗證

這個必須繼續的開發服務器是Windows Server 2003.這是一個組織選擇,而不是我自己的選擇。

此服務器具有該應用程序需要坐在的域的Windows身份驗證,這是我得到401錯誤的原因。

我嘗試設置認證通過殭屍docs的建議,像這樣:

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

這沒有奏效。

有什麼建議嗎?

+0

你爲什麼不只是使用https模塊,因爲它似乎將工作一樣好。 –

+0

我更新了上面的答案,但我沒有選擇應用程序所在的服務器。它必須位於運行IIS6的Windows 2003 Server上。 – marty

回答

1

browser.authenticate().basic() in Zombie.js執行HTTP basic authentication。您的網站受Windows身份驗證保護,即NTLM。這些是不同的和不兼容的協議。你需要使用像node-http-ntlm這樣的東西,並且弄清楚如何在測試中插入它,以便Zombie.js可以使用它建立的會話,或者擴展Zombie.js的身份驗證功能以包含NTLM。

+0

謝謝,我希望能夠在本週晚些時候檢查這一點,並得到這個工作。 – marty

0

你可以試試這個代碼

此外,圖書館還提供了輔助方法進行編碼和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); 
    }); 
}); 
相關問題