Ativar, desativar e usar políticas de senha

Este documento mostra como usar políticas de senha para melhorar a força de senhas para usuários novos e atuais.

Visão geral

Com as políticas de senha, é possível melhorar a segurança da conta aplicando requisitos de complexidade de senha. As políticas de senha são compatíveis com os seguintes requisitos de senha:

  • É necessário usar letras minúsculas
  • Caractere maiúsculo obrigatório
  • Caractere numérico obrigatório
  • É necessário um caractere não alfanumérico
  • Tamanho mínimo da senha (variando de 6 a 30 caracteres; o padrão é 6)
  • Tamanho máximo da senha (4.096 caracteres)

Os caracteres a seguir atendem ao requisito de caracteres não alfanuméricos, se configurados:

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

Antes de começar

Modos de aplicação

É possível ativar a aplicação da política de senha em dois modos:

  • Exigir: não será possível fazer login até que o usuário atualize a senha de acordo com sua política.
  • Notificar: os usuários podem se inscrever com uma senha que não está em compliance. Todos os critérios ausentes necessários para atender à política são retornados. Os critérios retornados incluem:

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

    Você pode enviar essas informações ao usuário para informá-lo de que ele precisa atualizar a senha. O exemplo a seguir mostra uma resposta com critérios de senha ausentes:

    {
      "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 usuários precisam escolher uma senha que esteja em conformidade com sua política. Se você tiver usuários ativos, recomendamos não ativar o upgrade forçado no login, a menos que tenha a intenção de aplicar imediatamente a política de senha. Em vez disso, use o modo de notificação, que permite que os usuários façam login com as senhas atuais e envia notificações que detalham os requisitos que faltam na senha.

Quando você ativar a aplicação, defina forceUpgradeOnSignin como true para ativar a aplicação no modo de exigência. Defina como false para ativar a aplicação de regras no modo de notificação.

Ativar aplicação

Para aplicar uma política de senha, faça o seguinte:

  1. Configure o login por e-mail e senha, caso ainda não tenha feito isso.
  2. Para aplicar uma política de senha no 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:

    • MIN_PASSWORD_LENGTH: o comprimento mínimo de senha necessário
    • MAX_PASSWORD_LENGTH: o comprimento máximo da senha necessária
  3. Para aplicar uma política de senha no nível do locatário, 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,
        },
      },
    })
    

Desativar a aplicação

  1. Para desativar a aplicação da política de senha no 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: 'OFF',
      },
    })
    
  2. Para desativar a aplicação obrigatória da política de senhas no nível do locatário, 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 locatário em que você quer desativar uma política de senha.

Como aplicar no lado do cliente

As senhas podem ser validadas de acordo com a política de senhas do projeto ou de um locatário 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.