我的简单express.js REST-API通过公司范围的LDAP服务器进行身份验证。我正在使用trentm的node-ldapauth module
实际问题是:当我使用一个简单的函数直接比较用户名和密码来提供测试值时,浏览器中的响应大约在8到15毫秒的范围内完成。这包括调用MongoDB获取数据(此测试不多)。
如果我使用ldapauth.authenticate函数,它执行缓存({cache:true}),则需要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);
});
}));
任何提示都表示赞赏。
答案 0 :(得分:1)
这是因为在node-ldapauth
下,bcrypt
使用bcrypt
加密强和缓慢的哈希算法。你实际上希望这发生。散列越慢,黑客反转哈希所需的时间越长。以下链接显示了它的使用位置:
https://github.com/trentm/node-ldapauth/blob/master/lib/ldapauth.js#L338
有关使用{{1}}结帐的详细信息,请参阅此文章:
http://codahale.com/how-to-safely-store-a-password/
当然,作者在那篇文章中提到的一些内容引起了广泛的争论,但是为什么你想要一个缓慢的哈希算法背后的想法是合理的。