我的簡單express.js REST-API通過公司範圍的LDAP服務器進行身份驗證。我正在使用trentm的node-ldapauth module爲什麼node-ldapauth如此緩慢,即使緩存?
實際的問題是:當我使用一個簡單的函數直接比較用戶名和密碼與提供的測試值時,瀏覽器中的響應大概在8到15 ms的範圍內完成。這包括調用MongoDB獲取數據(這個測試不多)。
如果我使用緩存({cache:true})的ldapauth.authenticate函數,它需要80到100毫秒。從代碼中,我只能看到它檢查一個LRU緩存,當然,第一個請求會比較慢,因爲它實際上是在檢查LDAP服務器,但後來呢?
下面是從應用一個小片段:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
var ldap = new LdapAuth({
url: config.ldap.url,
adminDn: config.ldap.adminDn,
adminPassword: config.ldap.adminPassword,
searchBase: config.ldap.userBase,
searchFilter: config.ldap.userFilter,
cache: true
});
app.enable('trust proxy');
app.use(express.json());
app.use(express.urlencoded());
app.use(checkUrl);
app.use(express.basicAuth(function(user, pass, callback) {
// if(user === 'samuel' && pass === 'supertest') {
// callback(null, {name: 'samuel'});
// } else {
// callback(new Error("Unauthorized"));
// }
ldap.authenticate(user, pass, function(err, user) {
if(err) {
console.log("LDAP auth error: %s %s", err, err.dn);
callback(err);
}
callback(err, user);
});
}));
任何提示讚賞。
非常感謝你對這個很好的解釋。我明白其背後的原因,但除了可能對我們的內部應用程序有點矯枉過正之外,時間約束對於此應用程序來說是完全不可接受的。 Java中的'參考實現'只會將返回的用戶從LDAP中逐出並每分鐘重新進行身份驗證,所以不需要任何哈希,因爲它不記住密碼。我可能需要在這裏實現相同的功能。 – smlgbl