根据 http://docs.mongodb.org/meta-driver/latest/legacy/implement-authentication-in-driver/的文档:
然后驱动程序为要进行身份验证的数据库运行身份验证命令。验证命令具有以下语法:
db.runCommand( { authenticate : 1, user : <username>, nonce : <nonce>, key : <digest> }
<username>是数据库的 system.users 集合中的用户名。
<nonce>是从前一个 getnonce 步骤返回的随机数。
<digest>是MD5 消息摘要的十六进制编码。MD5 消息摘要是 , , 的串联
<nonce>的<username>MD5哈希<password_digest>。是与数据库集合中的 相关联的字段中
<password_digest>的值。是的十六进制编码。pwd<username>system.userspwdMD5( <username> + ":mongo:" + <password_text> )
这意味着散列实际上是在客户端完成的,因为驱动程序是用于数据库连接的客户端的一部分。为了进行身份验证,客户端不需要证明对密码的了解,而是对存储的散列的了解。所以,真正的密码是存储的散列,它恰好是通过散列生成的。该真实密码以明文形式存储在pwd.system.users
我读错了吗?有没有办法保护这种身份验证?
