Habilita, inhabilita y usa políticas de contraseñas

En este documento, se muestra cómo configurar políticas de contraseñas para mejorar la seguridad de las contraseñas de los usuarios nuevos y existentes.

Si deseas establecer una política de contraseñas desde Firebase console, consulta Cómo establecer una política de contraseñas.

Descripción general

Con las políticas de contraseñas, puedes mejorar la seguridad de las cuentas aplicando requisitos de complejidad para las contraseñas. Las políticas de contraseñas de admiten los siguientes requisitos:

  • Se requiere un carácter en minúscula.
  • Se requiere un carácter en mayúscula.
  • Se requiere un carácter numérico.
  • Se requiere un carácter que no sea alfanumérico.
  • Longitud mínima de la contraseña (oscila entre 6 y 30 caracteres; el valor predeterminado es 6)
  • Longitud máxima de la contraseña (longitud máxima de 4,096 caracteres)

Los siguientes caracteres cumplen con el requisito de caracteres no alfanuméricos si están configurados:

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

Modos de aplicación

Puedes habilitar la aplicación forzosa de la política de contraseñas en dos modos:

  • Obligatorio: Los intentos de registro fallarán hasta que el usuario actualice su contraseña de acuerdo con tu política.
  • Notificación: Los usuarios pueden registrarse con una contraseña que no cumple con los requisitos. Se devuelven los criterios que faltan para satisfacer la política. Los criterios devueltos incluyen lo siguiente:

    • 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 que actualice su contraseña. En el siguiente ejemplo, se muestra una respuesta que contiene criterios de contraseñas faltantes:

    {
      "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 usuarios nuevos deben elegir una contraseña que cumpla con tu política. Si tienes usuarios activos, te recomendamos que no habilites la actualización forzosa en el acceso, a menos que pretendas aplicar de inmediato la política de contraseñas. En su lugar, usa el modo de notificación, que permite a los usuarios acceder con sus contraseñas actuales y envía notificaciones que detallan los requisitos que no cumple su contraseña.

Cuando habilites la aplicación forzosa, establece forceUpgradeOnSignin en true para habilitar la aplicación forzosa en el modo obligatorio. Establécelo en false para habilitar la aplicación forzosa en el modo de notificación.

Habilita la aplicación forzosa

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

  1. Si aún no lo hiciste, configura el acceso con correo electrónico y contraseña .
  2. Para aplicar una política de contraseñas a nivel de proyecto, sigue estos pasos:

    Firebase console

    1. En Firebase console, ve a la página Configuración de autenticación.

      Ir a la Configuración de autenticación

    2. Selecciona la pestaña Política de contraseñas.

    3. Configura los requisitos de seguridad de contraseñas seleccionados.

    4. Elige el modo de aplicación forzosa (Obligatorio o Notificación) y si deseas forzar las actualizaciones de contraseñas en el acceso.

    5. Haz clic en Guardar.

    REST

    1. En la Google Cloud consola, imprime un token de acceso para el ID de tu proyecto con el gcloud auth print-access-token comando:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Habilita una política de contraseñas con la Identity Toolkit API:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'ENFORCE','forceUpgradeOnSignin':true,'constraints':{'requireUppercase':true,'requireLowercase':true,'requireNonAlphanumeric':true,'requireNumeric':true,'minLength':MIN_PASSWORD_LENGTH,'maxLength':MAX_PASSWORD_LENGTH}}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=passwordPolicyConfig"
      

      Reemplaza lo siguiente:

      • ACCESS_TOKEN: El token de acceso que generaste antes
      • PROJECT_ID: Es el ID del proyecto.
      • MIN_PASSWORD_LENGTH: La longitud mínima requerida de la contraseña
      • MAX_PASSWORD_LENGTH: La longitud máxima requerida de la contraseña
  3. Para aplicar una política de contraseñas a nivel de usuario, sigue estos pasos:

    REST

    1. En la Google Cloud consola, imprime un token de acceso para el ID de tu proyecto con el gcloud auth print-access-token comando:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Habilita una política de contraseñas para un usuario con la API de Identity Toolkit:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'ENFORCE','forceUpgradeOnSignin':true,'constraints':{'requireUppercase':true,'requireLowercase':true,'requireNonAlphanumeric':true,'requireNumeric':true,'minLength':MIN_PASSWORD_LENGTH,'maxLength':MAX_PASSWORD_LENGTH}}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      Reemplaza lo siguiente:

      • ACCESS_TOKEN: El token de acceso que generaste antes
      • PROJECT_ID: Es el ID del proyecto.
      • TENANT_ID: Es el ID del usuario en el que deseas aplicar la política de contraseñas.
      • MIN_PASSWORD_LENGTH: La longitud mínima requerida de la contraseña
      • MAX_PASSWORD_LENGTH: La longitud máxima requerida de la contraseña

Inhabilitar la aplicación forzosa

  1. Para inhabilitar la aplicación forzosa de la política de contraseñas a nivel de proyecto, sigue estos pasos:

    Firebase console

    1. En Firebase console, ve a la página Configuración de autenticación.

      Ir a la Configuración de autenticación

    2. Selecciona la pestaña Política de contraseñas.

    3. Inhabilita la aplicación forzosa de la política de contraseñas.

    4. Haz clic en Guardar.

    REST

    1. En la Google Cloud consola, imprime un token de acceso para el ID de tu proyecto con el gcloud auth print-access-token comando:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Inhabilita la aplicación forzosa de la política de contraseñas con la API de Identity Toolkit:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'OFF'}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=passwordPolicyConfig"
      

      Reemplaza lo siguiente:

      • ACCESS_TOKEN: El token de acceso que generaste antes
      • PROJECT_ID: Es el ID del proyecto.
  2. Para inhabilitar la aplicación forzosa de la política de contraseñas a nivel de usuario, sigue estos pasos:

    REST

    1. En la Google Cloud consola, imprime un token de acceso para el ID de tu proyecto con el gcloud auth print-access-token comando:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Inhabilita la aplicación forzosa de la política de contraseñas para un usuario con la Identity Toolkit API:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'OFF'}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      Reemplaza lo siguiente:

      • ACCESS_TOKEN: El token de acceso que generaste antes
      • PROJECT_ID: Es el ID del proyecto.
      • TENANT_ID: Es el ID del usuario en el que deseas inhabilitar la política de contraseñas.

Aplicación forzosa en el cliente

Las contraseñas se pueden validar con la política de contraseñas del proyecto o de un usuario en el cliente 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 couldn't be validated.
});
const policy = status.passwordPolicy;

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