Secondo la documentazione di link :
The driver then runs the authenticate command for the database on which to authenticate. The authenticate command has the following syntax:
db.runCommand( { authenticate : 1, user : <username>, nonce : <nonce>, key : <digest> }
<username>
is a username in the database’s system.users collection.
<nonce>
is the nonce returned from a previous getnonce step.
<digest>
is the hex encoding of an MD5 message digest.The MD5 message digest is the MD5 hash of the concatenation of
<nonce>
,<username>
,<password_digest>
.The
<password_digest>
is the value in thepwd
field associated with the<username>
in the database'ssystem.users
collection. Thepwd
is the hex encoding ofMD5( <username> + ":mongo:" + <password_text> )
.
Ciò significa che l'hashing è effettivamente eseguito lato client, poiché il driver fa parte del client per la connessione al database. Per autenticare, il client non ha bisogno di dimostrare la conoscenza della password ma dell'hash memorizzato. Quindi, la vera password è l'hash memorizzato, che semplicemente è stato generato attraverso l'hashing di qualcosa. Quella password reale è memorizzata in testo normale nel campo pwd
di system.users
.
Sto leggendo quello sbagliato? C'è un modo per proteggere questa autenticazione?