Caminho no Gestor bibliotecas/jwt.php
Gera e valida JWT HS256 com um conjunto de chaves simétricas guardado no banco, com rotação e período de carência.
Chaves
O conjunto fica em JSON na tabela variaveis (modulo='sistema', id='jwt_keys'), cada chave com key_id, key_secret (256 bits), created_at, status (active/expired) e expired_at. A primeira chamada a jwt_generate_token() cria a chave ativa se não houver nenhuma.
jwt_rotate_keys() expira a chave ativa, cria uma nova e apaga as expiradas cuja carência já passou. A carência é AUTH_JWT_GRACE_HOURS (padrão 24) horas contadas de expired_at.
Uso
gestor_incluir_biblioteca('jwt');
$token = jwt_generate_token(['sub' => $idUsuario, 'exp' => time() + 3600]);
try {
$r = jwt_validate_token($token); // ['status' => 'Active'|'Grace', 'payload' => [...]]
if (($r['payload']['exp'] ?? 0) < time()) throw new Exception('Token expirado.');
if ($r['status'] === 'Grace') { /* emitir um token novo */ }
} catch (Exception $e) {
// malformado, kid desconhecido, assinatura inválida ou chave fora da carência
}Outros detalhes:
-
iaté acrescentado se ausente; o cabeçalho levakidcom okey_id. -
O
algdo cabeçalho é ignorado (a verificação é sempre HMAC-SHA256), o que evita o ataque de troca de algoritmo. -
As chaves secretas ficam em texto claro na tabela
variaveis: quem lê o banco (ou um backup) consegue emitir tokens.
Auxiliares internos (usados pelas funções acima; raramente chamados direto): jwt_base64url_encode(), jwt_base64url_decode(), jwt_rotation_days(), jwt_grace_hours(), jwt_keys_load(), jwt_keys_save(), jwt_nova_chave(), jwt_get_active_key().
Funções
Gerado a partir de gestor/bibliotecas/jwt.php · 11 funções
jwt_base64url_encode
ver no código · linha 28 ↗jwt_base64url_encode($data)Parâmetros
$data
jwt_base64url_decode
ver no código · linha 32 ↗jwt_base64url_decode($data)Parâmetros
$data
jwt_rotation_days
ver no código · linha 40 ↗jwt_rotation_days()jwt_grace_hours
ver no código · linha 44 ↗jwt_grace_hours()jwt_keys_load
ver no código · linha 55 ↗jwt_keys_load(): arrayCarrega o conjunto de chaves JWT do banco.
Retorno
jwt_keys_save
ver no código · linha 78 ↗jwt_keys_save(array $keys): voidPersiste o conjunto de chaves JWT no banco (insert ou update).
Parâmetros
$keysarray- Lista de chaves.
Retorno
jwt_nova_chave
ver no código · linha 106 ↗jwt_nova_chave(string $status = 'active'): arrayCria uma nova estrutura de chave JWT.
Parâmetros
$statusstring- 'active' ou 'expired'.
Retorno
jwt_get_active_key
ver no código · linha 120 ↗jwt_get_active_key(): arrayObtém a chave ativa; cria uma se ainda não existir.
Retorno
jwt_generate_token
ver no código · linha 142 ↗jwt_generate_token(array $payload): stringGera um token JWT assinado com a chave ativa.
Parâmetros
$payloadarray- Reivindicações do token.
Retorno
jwt_validate_token
ver no código · linha 169 ↗jwt_validate_token(string $token): arrayValida um token JWT.
Parâmetros
$tokenstring- Token JWT.
Retorno
jwt_rotate_keys
ver no código · linha 216 ↗jwt_rotate_keys(): arrayRotaciona as chaves JWT: marca a ativa como expirada, gera uma nova ativa e purga as chaves expiradas que já ultrapassaram o período de carência.
Retorno