Dans le cas simple décrit ci-dessous, l'utilisateur importera avec succès mais je reçois un INVALID_PASSWORD lorsque j'essaie de m'authentifier.

salt et passwordHash ont été extraits d'un annuaire d'utilisateurs LDAP (apacheds) à l'aide du schéma d'authentification {SSHA}. Lorsque j'exécute le JS suivant, je reçois le passwordHash que j'attends:

var sha1Hex = require('sha1-hex');

var saltHex =  Buffer.from("ktuF+dzYMQU=", 'base64').toString('hex');
var passwordHex = Buffer.from("demo", 'utf-8').toString('hex');

var hash = sha1Hex(Buffer.from(passwordHex + saltHex, 'hex'));
var hashBase64 = Buffer.from(hash, 'hex').toString('base64');
console.log(hashBase64);

Commande d'importation Firebase CLM:

firebase auth:import users.json --hash-algo=SHA1 --rounds=80

fichier users.json:

{
  "users": [
    {
      "localId": "3c872eee-e86c-4b44-9840-bcebaac18f2c",
      "email": "test@example.com",
      "salt": "ktuF+dzYMQU=",
      "passwordHash": "BuapoGGKIdfGprfMFjj3N9I7Ljg=",
      "displayName": "Demo User",
    }
  ]
}

Identifiants qui doivent fonctionner avec l'utilisateur importé:
Nom d'utilisateur: test@example.com
Mot de passe: demo

Commande de connexion de l'API Web Firebase (renvoie INVALID_PASSWORD):

firebase.auth().signInWithEmailAndPassword('test@example.com', demo);

Je ne suis pas sûr du paramètre --rounds=80, cela semble étrange qui doit être spécifié lors de l'utilisation de sha1. J'ai aussi essayé avec --rounds=0.

1
CMikeB1 26 avril 2017 à 01:21

3 réponses

Meilleure réponse

Après avoir essayé cela avec Java MessageDigest SHA-1 pour vérifier le hachage du mot de passe, l'un de nos experts en authentification uber a dit qu'il semble que vous le fassiez passwordHash = SHA1(plainPassword + salt)

Cependant, le système Firebase Auth utilise passwordHash = SHA1(salt + plainPassword).

Donc, je pense que si vous changez cela, cela devrait produire de meilleurs résultats.

1
Kato 26 avril 2017 à 05:23

Pour toute personne comme moi qui a passé des heures à trouver une solution à ce problème, veuillez consulter ce.

Fondamentalement, passwordHash doit être en codage Base64 à partir d'un hachage SHA1 non hexadécimal. Et --rounds=1 fonctionne très bien.

0
Erick Pranata 12 déc. 2019 à 08:55

Vous pouvez configurer l'ordre du mot de passe et du hachage.

Les hash-input-order acceptent deux valeurs: SALT_FIRST ou PASSWORD_FIRST.

Dans votre cas, vous souhaitez faire:

firebase auth:import users.json --hash-algo=SHA1 --rounds=80 --hash-input-order=PASSWORD_FIRST
1
Federkun 22 août 2019 à 13:07