Ativar, desativar e usar políticas de senha

Neste documento, mostramos como definir políticas de senha para melhorar o nível de segurança da senha para usuários novos e atuais.

Se você quiser definir uma política de senha no console do Firebase, consulte Definir uma política de senha.

Visão geral

Com elas, é 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:

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

Modos de aplicação

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

  • Exigir: não será possível se inscrever 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 conformidade com sua política. 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 que ele atualize a senha. O exemplo a seguir mostra uma resposta que contém 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 detalhando os requisitos que faltam na senha.

Ao 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 no modo de notificação.

Ativar aplicação

Para aplicar uma política de senha, siga estas etapas:

  1. Se você ainda não tiver feito isso, configure o login com e-mail e senha.
  2. Para aplicar uma política de senha no nível do projeto, siga estas etapas:

    Console do Firebase

    1. No console do Firebase, acesse a página Configurações de autenticação.

      Acesse as configurações de autenticação

    2. Selecione a guia Política de senha.

    3. Configure os requisitos de nível de segurança da senha selecionados.

    4. Escolha o modo restrito (Exigir ou Notificar) e se quer forçar upgrades de senha no processo de login.

    5. Clique em Salvar.

    REST

    1. No console do Google Cloud , imprima um token de acesso para o ID do projeto usando o comando gcloud auth print-access-token:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Ative uma política de senha usando a API 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/config?updateMask=passwordPolicyConfig"
      

      Substitua:

      • ACCESS_TOKEN: o token de acesso que você gerou anteriormente.
      • PROJECT_ID: ID do projeto;
      • MIN_PASSWORD_LENGTH: o tamanho mínimo obrigatório da senha
      • MAX_PASSWORD_LENGTH: o tamanho máximo exigido para a senha.
  3. Para aplicar uma política de senha no nível do locatário, siga estas etapas:

    REST

    1. No console do Google Cloud , imprima um token de acesso para o ID do projeto usando o comando gcloud auth print-access-token:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Ative uma política de senha para um locatário usando a API 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"
      

      Substitua:

      • ACCESS_TOKEN: o token de acesso que você gerou anteriormente.
      • PROJECT_ID: ID do projeto;
      • TENANT_ID: o ID do locatário em que você quer aplicar a política de senha
      • MIN_PASSWORD_LENGTH: o tamanho mínimo obrigatório da senha
      • MAX_PASSWORD_LENGTH: o tamanho máximo exigido para a senha.

Desativar aplicação

  1. Para desativar a aplicação obrigatória da política de senha no nível do projeto, siga estas etapas:

    Console do Firebase

    1. No console do Firebase, acesse a página Configurações de autenticação.

      Acesse as configurações de autenticação

    2. Selecione a guia Política de senha.

    3. Desative a aplicação da política de senha.

    4. Clique em Salvar.

    REST

    1. No console do Google Cloud , imprima um token de acesso para o ID do projeto usando o comando gcloud auth print-access-token:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Desative a aplicação da política de senha usando a API 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"
      

      Substitua:

      • ACCESS_TOKEN: o token de acesso que você gerou anteriormente.
      • PROJECT_ID: ID do projeto;
  2. Para desativar a aplicação obrigatória da política de senha no nível do locatário, siga estas etapas:

    REST

    1. No console do Google Cloud , imprima um token de acesso para o ID do projeto usando o comando gcloud auth print-access-token:

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Desative a aplicação da política de senha para um locatário usando a API 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/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      Substitua:

      • ACCESS_TOKEN: o token de acesso que você gerou anteriormente.
      • PROJECT_ID: ID do projeto;
      • TENANT_ID: o ID do locatário em que você quer desativar a política de senha.

Aplicação no lado do cliente

As senhas podem ser validadas de acordo com a política de senha 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 couldn't be validated.
});
const policy = status.passwordPolicy;

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