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
- Instale o SDK Admin
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:
- Se ainda não o fez, configure o início de sessão por email e palavra-passe.
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-passeMAX_PASSWORD_LENGTH
: o comprimento máximo necessário da palavra-passe
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
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', }, })
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.