Activer, désactiver et utiliser les règles concernant les mots de passe

Ce document vous explique comment définir des règles de mot de passe pour améliorer la robustesse des mots de passe des utilisateurs nouveaux et existants.

Présentation

Les règles relatives aux mots de passe vous permettent de renforcer la sécurité des comptes en appliquant des exigences de complexité des mots de passe. Les règles relatives aux mots de passe sont compatibles avec les exigences suivantes :

  • Minuscule requise
  • Majuscule requise
  • Caractère numérique requis
  • Caractère non alphanumérique requis
  • Longueur minimale du mot de passe (entre 6 et 30 caractères, 6 par défaut)
  • Longueur maximale du mot de passe (4 096 caractères maximum)

Les caractères suivants répondent à l'exigence de caractère non alphanumérique s'ils sont configurés :

^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ `

Avant de commencer

Les modes d'exécution

Vous pouvez activer l'application forcée des règles relatives aux mots de passe de deux manières :

  • Exiger : les tentatives d'inscription échouent tant que l'utilisateur n'indique pas un mot de passe conforme à vos règles.
  • Notification : les utilisateurs peuvent s'inscrire avec un mot de passe non conforme. Tous les critères manquants nécessaires pour respecter les règles sont renvoyés. Voici quelques exemples de critères renvoyés :

    • MISSING_LOWERCASE_CHARACTER
    • MISSING_UPPERCASE_CHARACTER
    • MISSING_NUMERIC_CHARACTER
    • MISSING_NON_ALPHANUMERIC_CHARACTER
    • MINIMUM_PASSWORD_LENGTH
    • MAXIMUM_PASSWORD_LENGTH

    Vous pouvez envoyer ces informations à l'utilisateur pour l'inviter à modifier son mot de passe. L'exemple suivant montre une réponse contenant des critères de mot de passe manquants :

    {
      "kind": "identitytoolkit#VerifyPasswordResponse",
      "localId": "CJL1i2",
      "email": "cloudysanfrancisco@gmail.com",
      "displayName": "",
      "idToken": "ID_TOKEN",
      "registered": true,
      "userNotifications": [
        {
          "notificationCode": "MISSING_NUMERIC_CHARACTER",
          "notificationMessage": "Password must contain a numeric character"
        },
        {
          "notificationCode": "MISSING_NON_ALPHANUMERIC_CHARACTER",
          "notificationMessage": "Password must contain a non-alphanumeric character"
        }
      ]
    }
    

Les nouveaux utilisateurs doivent choisir un mot de passe conforme à vos règles. Si vous avez des utilisateurs actifs, nous vous recommandons de ne pas activer la mise à niveau forcée à la connexion, sauf si vous avez l'intention d'appliquer immédiatement les règles concernant les mots de passe. Utilisez plutôt le mode notification, qui permet aux utilisateurs de se connecter avec leur mot de passe actuel et envoie des notifications détaillant les exigences auxquelles leur mot de passe ne répond pas.

Lorsque vous activez l'application, définissez forceUpgradeOnSignin sur true pour activer l'application en mode "require" (exiger). Définissez-le sur false pour activer l'application en mode "Notification".

Activer l'application des règles

Pour appliquer une règle relative aux mots de passe, procédez comme suit :

  1. Si vous ne l'avez pas encore fait, configurez la connexion par e-mail et mot de passe.
  2. Pour appliquer une règle relative aux mots de passe au niveau du projet, exécutez la commande suivante :

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().projectConfigManager().updateProjectConfig({
      passwordPolicyConfig: {
        enforcementState: 'ENFORCE',
        forceUpgradeOnSignin: true,
        constraints: {
          requireUppercase: true,
          requireLowercase: true,
          requireNonAlphanumeric: true,
          requireNumeric: true,
          minLength: MIN_PASSWORD_LENGTH,
          maxLength: MAX_PASSWORD_LENGTH,
        },
      },
    })
    

    Remplacez les éléments suivants :

    • MIN_PASSWORD_LENGTH : longueur minimale requise du mot de passe
    • MAX_PASSWORD_LENGTH : longueur maximale requise du mot de passe
  3. Pour appliquer une règle relative aux mots de passe au niveau du locataire, exécutez la commande suivante :

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().tenantManager().createTenant({
      displayName: "admin-tenant",
      passwordPolicyConfig: {
        enforcementState: 'ENFORCE',
        forceUpgradeOnSignin: true,
        constraints: {
          requireUppercase: true,
          requireLowercase: true,
          requireNonAlphanumeric: true,
          requireNumeric: true,
          minLength: MIN_PASSWORD_LENGTH,
          maxLength: MAX_PASSWORD_LENGTH,
        },
      },
    })
    

Désactiver l'application des règles

  1. Pour désactiver l'application de la règle relative aux mots de passe au niveau du projet, exécutez la commande suivante :

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().projectConfigManager().updateProjectConfig({
      passwordPolicyConfig: {
        enforcementState: 'OFF',
      },
    })
    
  2. Pour désactiver l'application de la règle relative aux mots de passe au niveau du locataire, exécutez la commande suivante :

    import { getAuth } from 'firebase-admin/auth';
    
    // Update tenant config with password policy config
    getAuth().tenantManager().updateTenant(TENANT-ID, {
      passwordPolicyConfig: {
        enforcementState: 'OFF',
      },
    })
    

    Remplacez TENANT-ID par l'ID du locataire pour lequel vous souhaitez désactiver une règle relative aux mots de passe.

Appliquer les règles côté client

Les mots de passe peuvent être validés par rapport à la règle relative aux mots de passe du projet ou d'un locataire côté client avant l'envoi.

import { getAuth, validatePassword } from 'firebase/auth';

const auth = getAuth();
auth.tenantId = TENANT-ID;

const status = await validatePassword(auth, 'password').catch((error) => {
  // Password could not be validated.
});
const policy = status.passwordPolicy;

// Use the status and policy to show what requirements are met and which are missing.