Ativar, desativar e usar políticas de senha

Este documento mostra como definir políticas de senha para melhorar a força da senha de 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 informá-lo sobre a atualização da 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 que detalham os requisitos que faltam na senha.

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

Ativar restrição

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

  1. Se ainda não tiver feito isso, configure o login por 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.

      Acessar 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 de aplicação (Exigir ou Notificar) e se quer forçar upgrades de senha no login.

    5. Clique em Salvar.

    REST

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

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

      Substitua:

      • ACCESS_TOKEN: o token de acesso gerado anteriormente
      • PROJECT_ID: o ID do projeto
      • MIN_PASSWORD_LENGTH: o comprimento mínimo de senha necessário
      • MAX_PASSWORD_LENGTH: o comprimento máximo de senha necessário
  3. Para aplicar uma política de senha no nível do locatário, siga estas etapas:

    REST

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

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

      Substitua:

      • ACCESS_TOKEN: o token de acesso gerado anteriormente
      • PROJECT_ID: o ID do projeto
      • TENANT_ID: o ID do locatário em que você quer aplicar a política de senha
      • MIN_PASSWORD_LENGTH: o comprimento mínimo de senha necessário
      • MAX_PASSWORD_LENGTH: o comprimento máximo de senha necessário

Desativar aplicação

  1. Para desativar a aplicação 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.

      Acessar 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 Google Cloud console, imprima um token de acesso para o ID do projeto usando o gcloud auth print-access-token comando:

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

      Substitua:

      • ACCESS_TOKEN: o token de acesso gerado anteriormente
      • PROJECT_ID: o ID do projeto
  2. Para desativar a aplicação da política de senha no nível do locatário, siga estas etapas:

    REST

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

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

      Substitua:

      • ACCESS_TOKEN: o token de acesso gerado anteriormente
      • PROJECT_ID: o 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 na 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.