URLs de Imagem OG Assinadas
Uma URL de imagem OG assinada é uma URL cujos parâmetros são protegidos com uma assinatura HMAC-SHA256, de modo que apenas você (e o código que detém o seu segredo) pode solicitar renders que contam para a sua quota mensal. A FastOG assina o conteúdo — parâmetros idênticos produzem sempre a URL idêntica e em cache — o que protege a sua quota e torna o cache determinístico.
Porque assinar os URLs das imagens OG
Um endpoint de imagem OG que renderiza texto arbitrário a partir de um URL não autenticado é uma quinta de renderização gratuita que qualquer pessoa pode usar. Num serviço baseado em subscrição, isso significa que qualquer pessoa poderia gastar o seu saldo. Assinar cada URL com um segredo que apenas o seu backend conhece bloqueia todos os pedidos não autorizados no primeiro acesso (sem cache), enquanto os URLs legítimos e em cache continuam a funcionar.
Como funciona a assinatura de conteúdo
- Você constrói a string de consulta canónica: todos os parâmetros (exceto a assinatura), ordenados e codificados segundo RFC-3986.
- Você calcula
HMAC_SHA256(secret, "GET/api/v1/og\n" + canonical). - Você anexa a assinatura como o parâmetro
s.
A mensagem não inclui carimbo de data/hora, pelo que o URL é estável: os mesmos parâmetros → o mesmo URL → a mesma entrada de cache.
canonical = "key=sk_...&template=default&title=Hello"
signature = HMAC-SHA256(secret, "GET/api/v1/og\n" + canonical)
url = ".../api/v1/og?key=...&template=default&title=Hello&s=" + signature
O compromisso que as pessoas interpretam mal
| Preocupação | Realidade |
|---|---|
| "Um URL assinado vai expirar" | Não — é assinado por conteúdo, válido até você rodar o segredo |
| "Um URL adulterado quebra a cache" | Não — um s inválido só recebe 401 numa falha de cache miss; as imagens em cache são devolvidas na mesma |
| "Preciso de timestamps para segurança" | A assinatura de conteúdo é suficiente para impedir abuso de quota; não é necessário relógio |
SDKs de ficheiro único
A FastOG disponibiliza um único ficheiro de assinatura (signer) por linguagem (zero dependências), para que nunca tenha de implementar HMAC manualmente. Transfira a partir da página de SDK ou curl diretamente do CDN:
curl -O https://fastog.com/sdk/node.js
FAQ
Os URLs assinados expiram alguma vez?
Não por predefinição — permanecem válidos até que rodeie o segredo HMAC da chave de API. Assinados por conteúdo, não por tempo.
Pode outra pessoa gastar a minha quota ao adivinhar um URL?
Não. Precisa do seu segredo HMAC para formar uma assinatura válida; sem ele, os renders não armazenados em cache devolvem 401 invalid_signature.
Assino o URL no navegador?
Não. Assine no lado do servidor (ou numa função de edge) onde o segredo nunca chega ao cliente. O URL da imagem renderizada é seguro para colocar no seu <head> público.