Habilitar, inhabilitar y usar políticas de contraseñas

En este documento se explica cómo usar las políticas de contraseñas para mejorar la seguridad de las contraseñas de los usuarios nuevos y actuales.

Información general

Las políticas de contraseñas te permiten aumentar la protección de la cuenta implementando requisitos de seguridad que deben cumplir las contraseñas. Las políticas de contraseñas admiten los siguientes requisitos:

  • Se requiere una letra minúscula
  • Se requiere un carácter en mayúsculas
  • Se requiere un carácter numérico
  • Se requiere un carácter no alfanumérico
  • Longitud mínima de la contraseña (entre 6 y 30 caracteres; el valor predeterminado es 6)
  • Longitud máxima de la contraseña (4096 caracteres)

Los siguientes caracteres cumplen el requisito de caracteres no alfanuméricos si se configuran:

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

Antes de empezar

Modos de cumplimiento

Puedes habilitar la aplicación de la política de contraseñas de dos formas:

  • Requerir: el usuario no podrá registrarse correctamente hasta que su contraseña no cumpla los requisitos de tu política.
  • Notificar: los usuarios pueden registrarse con una contraseña que no cumpla los requisitos. Se mostrarán los criterios que falten para cumplir la política. Los criterios devueltos incluyen:

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

    Puedes enviar esta información al usuario para informarle de que debe actualizar su contraseña. En el siguiente ejemplo se muestra una respuesta que contiene criterios de contraseña que faltan:

    {
      "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"
        }
      ]
    }
    

Los nuevos usuarios deben elegir una contraseña que cumpla tu política. Si tienes usuarios activos, te recomendamos que no habilites la actualización obligatoria al iniciar sesión, a menos que tengas la intención de aplicar la política de contraseñas inmediatamente. En su lugar, usa el modo de notificación, que permite a los usuarios iniciar sesión con sus contraseñas actuales y envía notificaciones que detallan los requisitos que no cumplen sus contraseñas.

Cuando habilites la implementación obligatoria, define forceUpgradeOnSignin como true para habilitarla en el modo obligatorio. Defínelo como false para habilitar la aplicación en el modo de notificación.

Habilitar la aplicación obligatoria

Para aplicar una política de contraseñas, sigue estos pasos:

  1. Si aún no lo has hecho, configura el inicio de sesión con correo y contraseña.
  2. Para aplicar una política de contraseñas a nivel de proyecto, ejecuta lo siguiente:

    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,
        },
      },
    })
    

    Haz los cambios siguientes:

    • MIN_PASSWORD_LENGTH: la longitud mínima requerida de la contraseña
    • MAX_PASSWORD_LENGTH: longitud máxima de la contraseña
  3. Para aplicar una política de contraseñas a nivel de inquilino, ejecuta lo siguiente:

    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,
        },
      },
    })
    

Inhabilitar la aplicación obligatoria

  1. Para inhabilitar la aplicación de la política de contraseñas a nivel de proyecto, ejecuta lo siguiente:

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().projectConfigManager().updateProjectConfig({
      passwordPolicyConfig: {
        enforcementState: 'OFF',
      },
    })
    
  2. Para inhabilitar la aplicación obligatoria de la política sobre contraseñas a nivel de inquilino, ejecuta lo siguiente:

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

    Sustituye TENANT-ID por el ID del arrendatario para el que quieras inhabilitar una política de contraseñas.

Aplicación del lado del cliente

Las contraseñas se pueden validar en el lado del cliente con respecto a la política de contraseñas del proyecto o de un arrendatario antes de enviarlas.

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.