Em ambientes corporativos com firewall restritivo, a forma correta de acessar a API de CPF é configurar um proxy reverso que centraliza a chave de autenticação, aplica cache de 30 minutos, distribui cotas por equipe e registra todas as consultas em um ponto único de auditoria — sem expor a x-api-key às aplicações internas.
Introdução
Em ambientes corporativos, o acesso direto a APIs externas nem sempre é possível. Firewalls, políticas de segurança e requisitos de auditoria exigem que todo tráfego passe por um ponto central de controle. Um proxy reverso resolve esse problema, intermediando as chamadas à API de CPF e adicionando camadas de segurança, cache e monitoramento. O OWASP recomenda a centralização de credenciais de API como boa prática de segurança para ambientes corporativos.
Por que usar um proxy reverso
-
Segurança — A API key fica centralizada no proxy, não distribuída entre múltiplas aplicações.
-
Controle de acesso — Definir quais aplicações internas podem consultar CPF.
-
Auditoria — Registrar todas as chamadas em um ponto único.
-
Cache — Evitar chamadas duplicadas à API externa.
-
Rate limiting interno — Distribuir a cota entre diferentes equipes.
-
Compliance — Atender políticas de segurança que exigem controle centralizado de tráfego.
Arquitetura com proxy reverso
[App 1] ─────┐
│
[App 2] ─────┼──→ [Proxy Reverso] ──→ [api.cpfhub.io]
│ (cache, auth,
[App 3] ─────┘ rate limit, log)
As aplicações internas chamam o proxy, que adiciona a API key e encaminha para a CPFHub.io. A resposta volta pelo mesmo caminho.
Configuração com Nginx
Nginx como proxy reverso
upstream cpfhub_api {
server api.cpfhub.io:443;
keepalive 10;
}
server {
listen 8080;
server_name cpf-proxy.interno.empresa.com;
# Acesso restrito à rede interna
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
deny all;
# Logs detalhados
access_log /var/log/nginx/cpf_proxy_access.log;
error_log /var/log/nginx/cpf_proxy_error.log;
location /cpf/ {
# Rate limit interno: 10 req/seg por IP
limit_req zone=cpf_limit burst=5 nodelay;
proxy_pass https://api.cpfhub.io/cpf/;
proxy_ssl_server_name on;
# Adicionar API key (centralizada no proxy)
proxy_set_header x-api-key "SUA_CHAVE_DE_API";
proxy_set_header Accept "application/json";
proxy_set_header Host api.cpfhub.io;
# Remover headers que não devem vazar
proxy_hide_header x-api-key;
# Timeouts
proxy_connect_timeout 10s;
proxy_read_timeout 20s;
proxy_send_timeout 10s;
# Cache de respostas
proxy_cache cpf_cache;
proxy_cache_valid 200 30m;
proxy_cache_valid 404 5m;
proxy_cache_key $uri;
}
}
# Zona de rate limit
limit_req_zone $binary_remote_addr zone=cpf_limit:10m rate=10r/s;
# Configuração de cache
proxy_cache_path /var/cache/nginx/cpf levels=1:2 keys_zone=cpf_cache:10m
max_size=100m inactive=30m use_temp_path=off;
Uso pelas aplicações internas
# As aplicações chamam o proxy interno (sem API key)
curl -X GET http://cpf-proxy.interno.empresa.com:8080/cpf/12345678900 \
-H "Accept: application/json" \
--max-time 15
Configuração com Node.js (Express)
Para maior flexibilidade, use um proxy em Node.js:
const express = require('express');
const app = express();
const API_KEY = process.env.CPFHUB_API_KEY;
// Middleware de autenticação interna
function autenticarCliente(req, res, next) {
const token = req.headers['x-internal-token'];
const tokensValidos = process.env.INTERNAL_TOKENS?.split(',') || [];
if (!tokensValidos.includes(token)) {
return res.status(403).json({ error: 'Acesso negado' });
}
next();
}
// Middleware de logging
function logConsulta(req, res, next) {
const inicio = performance.now();
res.on('finish', () => {
const duracao = performance.now() - inicio;
console.log(JSON.stringify({
timestamp: new Date().toISOString(),
ip: req.ip,
cpf: req.params.cpf,
status: res.statusCode,
duracao_ms: Math.round(duracao),
cliente: req.headers['x-client-name'] || 'desconhecido'
}));
});
next();
}
// Cache simples em memória
const cache = new Map();
const CACHE_TTL = 30 * 60 * 1000; // 30 minutos
app.get('/cpf/:cpf', autenticarCliente, logConsulta, async (req, res) => {
const { cpf } = req.params;
// Verificar cache
const cached = cache.get(cpf);
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
return res.json({ ...cached.data, _cache: true });
}
try {
const response = await fetch(`https://api.cpfhub.io/cpf/${cpf}`, {
method: 'GET',
headers: {
'x-api-key': API_KEY,
'Accept': 'application/json'
},
signal: AbortSignal.timeout(15000)
});
const data = await response.json();
// Cachear respostas de sucesso
if (response.ok) {
cache.set(cpf, { data, timestamp: Date.now() });
}
res.status(response.status).json(data);
} catch (error) {
res.status(502).json({
error: 'Erro ao consultar API externa',
detalhes: error.message
});
}
});
app.listen(8080, () => {
console.log('Proxy CPF rodando na porta 8080');
});
Controle de cota por equipe
Distribua a cota entre diferentes equipes ou aplicações:
const cotas = {
'equipe-onboarding': { limite: 500, consumido: 0 },
'equipe-credito': { limite: 300, consumido: 0 },
'equipe-compliance': { limite: 200, consumido: 0 }
};
function verificarCota(req, res, next) {
const equipe = req.headers['x-client-name'];
if (!cotas[equipe]) {
return res.status(403).json({ error: 'Equipe não cadastrada' });
}
if (cotas[equipe].consumido >= cotas[equipe].limite) {
return res.status(429).json({
error: 'Cota da equipe esgotada',
consumido: cotas[equipe].consumido,
limite: cotas[equipe].limite
});
}
cotas[equipe].consumido++;
next();
}
// Resetar cotas no início de cada mês
const cron = require('node-cron');
cron.schedule('0 0 1 * *', () => {
for (const equipe of Object.keys(cotas)) {
cotas[equipe].consumido = 0;
}
console.log('Cotas resetadas');
});
Segurança adicional
Criptografia em trânsito
Garanta que o proxy use HTTPS tanto na entrada (aplicações internas) quanto na saída (API externa).
Máscara de dados nos logs
function mascararCPF(cpf) {
return cpf.substring(0, 3) + '.***.***-' + cpf.substring(9);
}
// No log: 123.***.***-00 em vez do CPF completo
Firewall rules
-
Permitir saída do proxy apenas para
api.cpfhub.io:443. -
Permitir entrada no proxy apenas da rede interna.
-
Bloquear todo outro tráfego.
Monitoramento do proxy
-
Latência do proxy — Tempo adicionado pelo proxy (deve ser mínimo, abaixo de 10ms).
-
Cache hit rate — Percentual de respostas servidas do cache.
-
Distribuição de cota — Consumo por equipe.
-
Erros 502/504 — Problemas de comunicação com a API externa.
Perguntas frequentes
Por que centralizar a chave de API no proxy em vez de distribuir por aplicação?
Distribuir a x-api-key entre múltiplas aplicações aumenta o risco de vazamento (repositórios, logs, variáveis de ambiente mal configuradas). Centralizando no proxy, apenas uma instância conhece a chave. Todas as aplicações internas se autenticam com tokens internos, que podem ser revogados individualmente sem afetar a integração com a CPFHub.io.
O proxy reverso aumenta a latência das consultas de CPF?
O overhead do proxy é mínimo — geralmente abaixo de 10ms. Para consultas em cache, a resposta é ainda mais rápida, pois não há requisição à API externa. A latência total para o cliente interno fica em torno de 910ms na primeira consulta e próxima de zero nas consultas subsequentes ao mesmo CPF dentro da janela de cache de 30 minutos.
Como garantir que o proxy não vire um ponto único de falha?
Configure o proxy com redundância: duas instâncias atrás de um load balancer interno, com health checks automáticos. Para o Nginx, use o bloco upstream com múltiplos servidores e a diretiva fail_timeout. Para o proxy em Node.js, implemente um circuit breaker que responde com erro 503 quando a API externa está indisponível, evitando cascata de falhas.
Qual é o custo da API CPFHub.io para ambientes corporativos com múltiplas equipes?
O plano Pro cobre 1.000 consultas/mês por R$149. Para volumes corporativos maiores, o plano Corporativo é personalizado. Em ambos os casos, ao atingir o limite, a API não bloqueia — cada consulta excedente é cobrada a R$0,15. O controle de cota por equipe no proxy permite distribuir e monitorar o consumo internamente antes de atingir o limite do plano.
Conclusão
Um proxy reverso é a solução ideal para ambientes corporativos que precisam de controle centralizado sobre consultas de CPF. Com cache, rate limiting interno, auditoria e distribuição de cota por equipe, você garante segurança, eficiência e conformidade com as políticas da organização — sem expor a chave de API e sem criar dependências diretas entre cada aplicação e a API externa.
A CPFHub.io oferece 50 consultas gratuitas por mês para você testar a integração via proxy antes de qualquer contratação. Quando estiver pronto para produção, o plano Pro e o plano Corporativo acompanham o crescimento da sua operação. Crie sua conta gratuita em cpfhub.io e comece a configurar seu proxy hoje.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



