Caminho no Gestor bibliotecas/autenticacao.php
Quatro assuntos: o token JWT com RSA que o Gestor usa no cookie de login e na API, cifrar e decifrar valores com as chaves RSA do site, o controle de tentativas por IP e as credenciais do canal distribuído. As chaves ficam em autenticacoes/<dominio>/chaves/gestor/ (privada.key, protegida por OPENSSL_PASSWORD, e publica.key), veja variáveis globais.
O token RSA
Não é um JWT padrão (RS256): o cabeçalho diz "alg": "RSA", e a "assinatura" é o próprio cabeçalho.payload cifrado com a chave privada (openssl_private_encrypt, em blocos de 245 bytes, cada bloco em base64 e o conjunto de novo em base64). Validar é decifrar com a chave pública e comparar com o cabeçalho.payload recebido.
-
autenticacao_gerar_jwt_chave_privada(['host', 'expiration', 'pubID', 'chavePrivada', 'chavePrivadaSenha', 'payload' => opcional])gera o token. Sempayload, usa{iss: host, exp: expiration, sub: pubID}. Emite os tokens da API; o cookie de login usa o mesmo formato, gerado porusuario_gerar_token_autorizacao()(usuario.php) e validado porgestor_permissao_validar_jwt(). -
autenticacao_validar_jwt_chave_publica(['token', 'chavePublica', 'retornarPayloadCompleto'])confere a assinatura, exigeexpesube recusa token vencido. Devolve osub(opubID), o payload inteiro oufalse.
Validar o token é só o primeiro passo: gestor_permissao_token() ainda confere o pubID em usuarios_tokens com o HMAC de USUARIO_HASH_PASSWORD (ciclo de uma requisição).
As variantes invertidas autenticacao_gerar_jwt_chave_publica() e autenticacao_validar_jwt_chave_privada(), e autenticacao_cliente_gerar_jwt() / autenticacao_cliente_gerar_token_validacao() (do modo multi-host), não têm chamadores.
Cifrar segredos
| Função | Cifra com | Decifra com |
|---|---|---|
autenticacao_encriptar_chave_privada() / autenticacao_decriptar_chave_publica() |
privada | pública |
autenticacao_encriptar_chave_publica() / autenticacao_decriptar_chave_privada() |
pública | privada |
O primeiro par é o usado para guardar chaves de API (servidores de IA): esconde o valor de quem só vê o banco, mas quem tem o banco e a chave pública o recupera. Para sigilo de verdade, cifre com a pública e decifre com a privada.
autenticacao_openssl_gerar_chaves() gera um par RSA de 2048 bits; autenticacao_gerar_senha() e autenticacao_crypto_rand_secure() geram senhas e números aleatórios. As três não têm chamadores no core (o instalador tem o próprio gerador de chaves).
Controle de tentativas por IP
A tabela acessos guarda, por IP (de ip_get()) e tipo (login, signup, forgot-password), a contagem, o status e o bloqueio.
| Função | Quando chamar |
|---|---|
autenticacao_acesso_verificar(['tipo']) |
Antes de mostrar/processar o formulário: permitido, status (livre, antispam, bloqueado) e tempo_bloqueio |
autenticacao_acesso_falha(['tipo']) |
Senha errada |
autenticacao_acesso_confirmar(['tipo']) |
Login certo: zera a contagem |
autenticacao_acesso_cadastrar(['tipo', 'antispam']) |
Cada cadastro ou pedido de recuperação |
Limites do .env: no login, até ACESSOS_MAXIMO_LOGINS_SIMPLES (3) falhas o status é livre, até ACESSOS_MAXIMO_FALHAS_LOGINS (10) é antispam, e depois bloqueado. Nos cadastros, ACESSOS_MAXIMO_CADASTROS_* e ACESSOS_MAXIMO_CADASTROS_SIMPLES_* por tipo. Cada bloqueio dura bloqueios × ACESSOS_TEMPO_BLOQUEIO_IP segundos (cresce a cada reincidência), e o registro some depois de ACESSOS_TEMPO_DESBLOQUEIO_IP sem atividade. autenticacao_acessos_limpeza() roda a cada verificação e aplica essas duas regras.
No perfil-usuario, o status decide o CAPTCHA: com reCAPTCHA, ele só é exigido a partir de antispam; com Turnstile, sempre.
Canal distribuído
Usadas pelo central da arquitetura distribuída:
-
autenticacao_distribuido_gerar_tokens($id_usuarios): tokens OAuth2 com escopodistributed; -
autenticacao_distribuido_verificar_permissao_modulo(): o perfil do usuário tem o módulo alvo; -
autenticacao_distribuido_token_ativo(): o access token do canal é válido.
A validação de credenciais do canal não passa pelo controle de tentativas.
Funções
Gerado a partir de gestor/bibliotecas/autenticacao.php · 21 funções
autenticacao_crypto_rand_secure
ver no código · linha 33 ↗autenticacao_crypto_rand_secure(int $min, int $max): intGera um número aleatório criptograficamente seguro.
Parâmetros
$minint- Valor mínimo (inclusivo).
$maxint- Valor máximo (inclusivo).
Retorno
autenticacao_cliente_gerar_jwt
ver no código · linha 69 ↗autenticacao_cliente_gerar_jwt(array|false $params = false): string|falseGera um token JWT assinado com chave RSA para autenticação de cliente.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
autenticacao_openssl_gerar_chaves
ver no código · linha 145 ↗autenticacao_openssl_gerar_chaves(array|false $params = false): array|falseGera par de chaves pública e privada OpenSSL com algoritmo RSA.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
autenticacao_gerar_senha
ver no código · linha 298 ↗autenticacao_gerar_senha(int $length = 32): stringGera uma senha aleatória segura com caracteres variados.
Parâmetros
$lengthint- Comprimento da senha (padrão: 32 caracteres).
Retorno
autenticacao_gerar_jwt_chave_publica
ver no código · linha 343 ↗autenticacao_gerar_jwt_chave_publica(array|false $params = false): string|falseGera JWT assinado com chave pública RSA.
Parâmetros
$paramsarray|false- Parâmetros (host, expiration, pubID, chavePublica obrigatórios).
Retorno
autenticacao_gerar_jwt_chave_privada
ver no código · linha 408 ↗autenticacao_gerar_jwt_chave_privada(array|false $params = false): string|falseGera JWT assinado com chave privada RSA.
Parâmetros
$paramsarray|false- Parâmetros (host, expiration, pubID, chavePrivada, chavePrivadaSenha obrigatórios; payload opcional).
Retorno
autenticacao_validar_jwt_chave_publica
ver no código · linha 480 ↗autenticacao_validar_jwt_chave_publica(array|false $params = false): array|string|falseValida JWT usando chave pública RSA.
Parâmetros
$paramsarray|false- Parâmetros (token, chavePublica obrigatórios; retornarPayloadCompleto opcional).
Retorno
autenticacao_validar_jwt_chave_privada
ver no código · linha 569 ↗autenticacao_validar_jwt_chave_privada(array|false $params = false): array|falseValida JWT usando chave privada RSA.
Parâmetros
$paramsarray|false- Parâmetros (token, chavePrivada, chavePrivadaSenha obrigatórios).
Retorno
autenticacao_cliente_gerar_token_validacao
ver no código · linha 657 ↗autenticacao_cliente_gerar_token_validacao(array|false $params = false): arrayGera token JWT de validação para cliente.
Parâmetros
$paramsarray|false- Parâmetros (id_hosts obrigatório, pubID opcional).
Retorno
autenticacao_acesso_verificar
ver no código · linha 725 ↗autenticacao_acesso_verificar(array|false $params = false): arrayVerifica estado de acesso do usuário com proteção anti-spam.
Parâmetros
$paramsarray|false- Parâmetros (tipo obrigatório).
Retorno
autenticacao_acesso_cadastrar
ver no código · linha 795 ↗autenticacao_acesso_cadastrar(array|false $params = false): voidCadastra tentativa de acesso do usuário para controle anti-spam.
Parâmetros
$paramsarray|false- Parâmetros (tipo obrigatório, antispam opcional).
Retorno
autenticacao_acesso_confirmar
ver no código · linha 914 ↗autenticacao_acesso_confirmar(array|false $params = false): voidConfirma acesso bem-sucedido do usuário.
Parâmetros
$paramsarray|false- Parâmetros (tipo obrigatório).
Retorno
autenticacao_acesso_falha
ver no código · linha 972 ↗autenticacao_acesso_falha(array|false $params = false): voidRegistra falha de acesso do usuário.
Parâmetros
$paramsarray|false- Parâmetros (tipo obrigatório).
Retorno
autenticacao_acessos_limpeza
ver no código · linha 1086 ↗autenticacao_acessos_limpeza(array|false $params = false): voidLimpa registros antigos da tabela de acessos.
Parâmetros
$paramsarray|false- Parâmetros da função.
Retorno
autenticacao_encriptar_chave_publica
ver no código · linha 1116 ↗autenticacao_encriptar_chave_publica(array|false $params = false): string|falseEncripta valor usando chave pública RSA.
Parâmetros
$paramsarray|false- Parâmetros (valor, chavePublica obrigatórios).
Retorno
autenticacao_encriptar_chave_privada
ver no código · linha 1164 ↗autenticacao_encriptar_chave_privada(array|false $params = false): string|falseEncripta valor usando chave privada RSA.
Parâmetros
$paramsarray|false- Parâmetros (valor, chavePrivada, chavePrivadaSenha obrigatórios).
Retorno
autenticacao_decriptar_chave_publica
ver no código · linha 1212 ↗autenticacao_decriptar_chave_publica(array|false $params = false): string|falseDecripta valor usando chave pública RSA.
Parâmetros
$paramsarray|false- Parâmetros (criptografia, chavePublica obrigatórios).
Retorno
autenticacao_decriptar_chave_privada
ver no código · linha 1266 ↗autenticacao_decriptar_chave_privada(array|false $params = false): string|falseDecripta valor usando chave privada RSA.
Parâmetros
$paramsarray|false- Parâmetros (criptografia, chavePrivada, chavePrivadaSenha obrigatórios).
Retorno
autenticacao_distribuido_gerar_tokens
ver no código · linha 1326 ↗autenticacao_distribuido_gerar_tokens(int $id_usuarios): array|falseGera os tokens de acesso e renovação (OAuth2) para o canal distribuído.
Parâmetros
$id_usuariosint- ID do usuário já validado.
Retorno
autenticacao_distribuido_verificar_permissao_modulo
ver no código · linha 1356 ↗autenticacao_distribuido_verificar_permissao_modulo(int $id_usuarios, string $modulo): boolVerifica se o usuário tem permissão de acesso ao módulo alvo (controle por perfil).
Parâmetros
$id_usuariosint- ID do usuário já autenticado.
$modulostring- Slug do módulo alvo (ex.: 'modulos-grupos-distribuido').
Retorno
autenticacao_distribuido_token_ativo
ver no código · linha 1464 ↗autenticacao_distribuido_token_ativo(string $token): boolVerifica se um access token do canal distribuído está ativo e íntegro.
Parâmetros
$tokenstring- Access token a validar.
Retorno