Ative, desative e use políticas de palavras-passe

Este documento mostra como definir políticas de palavras-passe para melhorar a robustez das palavras-passe para utilizadores novos e existentes.

Vista geral

Com as políticas de palavras-passe, pode melhorar a segurança da conta aplicando requisitos de complexidade das palavras-passe. As políticas de palavras-passe suportam os seguintes requisitos de palavras-passe:

  • Caráter em minúsculas obrigatório
  • É necessário um caráter em maiúsculas
  • É necessário um caráter numérico
  • É necessário um caráter não alfanumérico
  • Comprimento mínimo da palavra-passe (intervalo de 6 a 30 carateres; predefinição de 6)
  • Comprimento máximo da palavra-passe (comprimento máximo de 4096 carateres)

Os seguintes carateres satisfazem o requisito de carateres não alfanuméricos se estiverem configurados:

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

Antes de começar

Modos de aplicação

Pode ativar a aplicação da política de palavras-passe em dois modos:

  • Obrigatório: as tentativas de inscrição falham até o utilizador atualizar para uma palavra-passe que esteja em conformidade com a sua política.
  • Notificar: os utilizadores podem inscrever-se com uma palavra-passe não compatível. São devolvidos todos os critérios em falta necessários para cumprir a política. Os critérios devolvidos incluem:

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

    Pode enviar estas informações ao utilizador para o informar de que deve atualizar a respetiva palavra-passe. O exemplo seguinte mostra uma resposta que contém critérios de palavra-passe em falta:

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

Os novos utilizadores têm de escolher uma palavra-passe em conformidade com a sua política. Se tiver utilizadores ativos, recomendamos que não ative a atualização forçada no início de sessão, a menos que pretenda aplicar imediatamente a política de palavras-passe. Em alternativa, use o modo de notificação, que permite aos utilizadores iniciar sessão com as respetivas palavras-passe atuais e envia notificações que detalham os requisitos que a palavra-passe não cumpre.

Quando ativa a aplicação, defina forceUpgradeOnSignin como true para ativar a aplicação no modo obrigatório. Defina-o como false para ativar a aplicação no modo de notificação.

Ative a aplicação

Para aplicar uma política de palavra-passe, faça o seguinte:

  1. Se ainda não o fez, configure o início de sessão por email e palavra-passe.
  2. Para aplicar uma política de palavra-passe ao nível do projeto, execute o seguinte:

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

    Substitua o seguinte:

    • MIN_PASSWORD_LENGTH: o comprimento mínimo necessário da palavra-passe
    • MAX_PASSWORD_LENGTH: o comprimento máximo necessário da palavra-passe
  3. Para aplicar uma política de palavra-passe ao nível do inquilino, execute o seguinte:

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

Desative a aplicação

  1. Para desativar a aplicação da política de palavras-passe ao nível do projeto, execute o seguinte comando:

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().projectConfigManager().updateProjectConfig({
      passwordPolicyConfig: {
        enforcementState: 'OFF',
      },
    })
    
  2. Para desativar a aplicação da política de palavras-passe ao nível do inquilino, execute o seguinte:

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

    Substitua TENANT-ID pelo ID do inquilino para o qual quer desativar uma política de palavras-passe.

Aplicação do lado do cliente

As palavras-passe podem ser validadas em relação à política de palavras-passe do projeto ou de um inquilino no lado do cliente antes do envio.

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.