我正在玩一些项目来学习MongoDB,我想要添加的其中一项是网站的身份验证机制。
使用传统的RDBMS时,您可以找到大量的库来自动化许多复杂的身份验证,MongoDB有什么东西吗?
我要找的是:
a)简单易用的东西,与MongoDB开箱即用,或者 b)一些非常简单的东西,我可以在其上输入密码并从中获得理智的哈希值。
那里有类似的东西吗?
注意:我不是在讨论内置的MongoDB身份验证。我的意思是我想在使用MongoDB作为数据存储的网站中构建身份验证层。如果所有其他方法都失败了,只要我有一些关于抽取盐渍/散热的好东西,我就可以完成繁重的工作,所以我不必担心它是正确的。
答案 0 :(得分:1)
PHP具有您需要的哈希函数。我更喜欢使用hash_pbkdf2(),但它仅适用于PHP的后期版本。所以我经常使用标准化程度较低的crypt()函数。
它们的工作方式基本相同:您使用密码,算法和一些盐,并且密码多次(数千)。输出哈希包括进入它的额外参数(算法,盐和轮次),因此您可以在有人尝试登录时重新创建哈希。
这两种技术的优点是:
我写了一个简短的例子,有一个小单元测试。
/* Hashes a password using 2000 rounds of SHA-256 and a random salt.
Returns a string.
*/
function hashpw($password) {
$algo = '$5$rounds=2000$'; // specify SHA-256
$salt = $algo . mt_rand();
return crypt(strval($password), $salt);
}
/* Given a password and a hash produced by hashpw(), tells you if the hash
belongs to the password or not.
Returns a boolean.
*/
function confirmpw($password, $hash) {
return (crypt(strval($password), strval($hash)) === $hash);
}
$passwords = array(
'hello world',
'secret',
'super-secret',
'my pets name',
);
foreach($passwords as $onePass) {
$hash = hashpw($onePass);
$verified = confirmpw($onePass, $hash) ? 'verified' : 'failed' ;
echo "$onePass ==> $hash ==> $verified \n";
}
答案 1 :(得分:0)
Codeigniter有这个:https://github.com/pawankorotane/mongodb-tank-auth
如果您没有使用CodeIgniter,您可以随时检查代码并修改您使用的框架。