Según la documentación en enlace :
El controlador ejecuta el comando de autenticación para la base de datos en la que se va a autenticar. El comando de autenticación tiene la siguiente sintaxis:
db.runCommand( { authenticate : 1, user : <username>, nonce : <nonce>, key : <digest> }
<username>
es un nombre de usuario en la colección system.users de la base de datos.
<nonce>
es el nonce devuelto desde un paso de getnonce anterior.
<digest>
es la codificación hexadecimal de un resumen de mensaje MD5 .El MD5 message digest es el hash MD5 de la concatenación de
<nonce>
,<username>
,<password_digest>
.El
<password_digest>
es el valor en el campopwd
asociado con el<username>
en la colecciónsystem.users
de la base de datos. Elpwd
es la codificación hexadecimal deMD5( <username> + ":mongo:" + <password_text> )
.
Esto significa que el hashing se realiza en el lado del cliente, ya que el controlador forma parte del cliente para la conexión de la base de datos. Para autenticarse, el cliente no necesita demostrar el conocimiento de la contraseña sino del hash almacenado. Por lo tanto, la contraseña real es el hash almacenado, que simplemente se generó a través del hashing de algo. Esa contraseña real se almacena en texto sin formato en el campo pwd
de system.users
.
¿Estoy leyendo eso mal? ¿Hay alguna manera de asegurar esta autenticación?