FastOG
Onderwerp

HMAC-authenticatie en beveiliging

Beveilig je HMAC-ondertekende OG-image-URL's met FastOG's HMAC-SHA256-authenticatie. Deze handleiding behandelt het ondertekenen, valideren en oplossen van problemen bij elke aanvraag, zodat je dynamische Open Graph-afbeeldingen direct kunt leveren β€” met abonnementsbeperking en onbeperkte renders (geen maandelijkse renderlimiet en geen overschrijdingskosten). Meld je aan, kies een Dynamic API-plan en maak vervolgens je API-sleutel en HMAC-geheim aan in het dashboard (betaalde API-renders zijn schoon). Onderteken eenmalig op je server en integreer binnen enkele minuten.

πŸš€ Snel aan de slag

Nieuw met HMAC-ondertekening? Begin hier:

  1. Snelstartgids β€” Aan de slag in 5 minuten
  2. JavaScript-zelfstudie β€” Volledige handleiding voor Node.js/Next.js-ontwikkelaars
  3. Alle framework-zelfstudies β€” kies je stack:

πŸ“š Documentatie-index

Kernconcepten

  • HMAC-handtekeninggids β€” Volledige referentie met algoritmedetails, vereisten en voorbeelden in JavaScript, PHP en Python
  • HMAC-validatie β€” Server-side implementatiedetails, beveiligingsfuncties en foutmeldingen

Tutorials

Snelle referentie

Algoritme

method = "GET"
path = "/api/v1/og"
canonicalQuery = every query param EXCEPT `s` (including `key`): array values sorted too; each pair rfc3986Encode(key)=rfc3986Encode(value); pairs sorted lexicographically and joined with "&"

message = method + path + "\n" + canonicalQuery
signature = hex(HMAC-SHA256(message, hmac_secret))

URL: /api/v1/og?title=Hello&key=sk_quick_123abc&s=<signature>

Queryparameters

Parameter Beschrijving Voorbeeld
key Volledige API-sleutel sk_quick_123abc
s HMAC-SHA256-handtekening (64 hex-tekens) 9f8a1b2c3d4e...

Foutcodes

Code HTTP-status Beschrijving
missing_signature 401 Ontbrekende parameter key of s
invalid_signature 401 Handtekening komt niet overeen

🎯 Gebruikssituaties

Blogberichten

Genereer dynamische OG-afbeeldingen voor blogberichten:

javascript
const ogUrl = generateSignedOgUrl({
    template: "blog",
    title: post.title,
    subtitle: post.excerpt,
    author: post.author.name,
});

// <meta property="og:image" content="{ogUrl}" />

E-commerceproducten

Maak OG-afbeeldingen voor productpagina's:

javascript
const ogUrl = generateSignedOgUrl({
    template: "ecommerce",
    title: product.name,
    price: product.price,
    image: product.image,
});

Klantbeoordelingen

Genereer OG-afbeeldingen voor klantcitaten:

javascript
const ogUrl = generateSignedOgUrl({
    template: "testimonial",
    author_name: user.name,
    author_avatar: user.avatarUrl,
    quote: user.bio,
});

πŸ” Beveiliging

Beste praktijken

  1. Bewaar geheimen veilig β€” Gebruik omgevingsvariabelen of een geheimenbeheerder
  2. Stel het HMAC-geheim nooit bloot in client-side code β€” Onderteken alleen op de server
  3. Gebruik HTTPS β€” Voorkomt MITM-aanvallen
  4. Roteer geheimen periodiek β€” Vooral als ze mogelijk gecompromitteerd zijn
  5. Monitor mislukte handtekeningen β€” Herhaalde mislukkingen kunnen duiden op aanvallen
  6. Isolatie per gebruiker β€” Elke API-sleutel heeft zijn eigen HMAC-geheim

Je HMAC-geheim verkrijgen

  1. Ga naar Dashboard β†’ API-sleutels
  2. Maak een nieuwe API-sleutel aan
  3. Kopieer het HMAC-geheim (wordt slechts één keer getoond!)
  4. Sla het op in omgevingsvariabelen
bash
# .env
FASTOG_HMAC_SECRET=<your-64-char-hex-secret>

πŸ§ͺ Testen

Test-URL genereren

bash
# Node.js
node -e "
const crypto = require('crypto');
const enc = (s) => encodeURIComponent(s).replace(/[!'()*]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase());
const all = { title: 'Test', key: 'sk_quick_123abc' };
const pairs = [];
for (const [k, v] of Object.entries(all)) for (const vv of Array.isArray(v) ? v : [v]) pairs.push(enc(k) + '=' + enc(vv));
pairs.sort();
const canonical = pairs.join('&');
const sig = crypto.createHmac('sha256', 'YOUR_HMAC_SECRET').update('GET/api/v1/og\n' + canonical).digest('hex');
console.log('https://fastog.com/api/v1/og?title=Test&key=sk_quick_123abc&s=' + sig);
"

Testen met curl

bash
curl "https://fastog.com/api/v1/og?title=Test&key=sk_quick_123abc&s=<signature>"

Verwachte reacties

  • βœ… Geldige handtekening β†’ Retourneert OG-afbeelding (of 422 als templateparameters ongeldig zijn)
  • ❌ Ongeldige handtekening β†’ {"code": "invalid_signature"}
  • ❌ Ontbrekende parameters β†’ {"code": "missing_signature"}

πŸ›  Problemen oplossen

Handtekening komt niet overeen

  1. Controleer of je de juiste HMAC-geheime sleutel gebruikt (check de API-sleutel in het dashboard)
  2. Controleer de canonieke query: elke queryparameter behalve s (inclusief key), waarden rfc3986-gecodeerd, sleutels lexicografisch gesorteerd
  3. Controleer of de handtekening kleine hexadecimale letters zijn (64 tekens)

πŸ“– Aanvullende bronnen

❓ FAQ

V: Waarom queryparameters in plaats van headers?
A: OG-afbeeldingen worden opgehaald door crawlers van sociale netwerken (LinkedIn, Twitter, Facebook) die geen aangepaste headers meesturen. De handtekening MOET in de URL staan.

V: Kan ik dezelfde handtekening voor meerdere verzoeken gebruiken?
A: Ja. Een handtekening wordt berekend op basis van de exacte query (minus s), dus dezelfde ondertekende URL blijft geldig zolang de parameters niet wijzigen. Wijzig je een parameter (inclusief key), dan moet je opnieuw ondertekenen.

V: Moet ik verzoeken voor alle sjablonen ondertekenen?
A: Ja. Alle verzoeken aan /api/v1/og vereisen HMAC-handtekeningen.

V: Wat gebeurt er als mijn HMAC-geheim wordt gecompromitteerd?
A: Trek de API-sleutel in het dashboard in en maak een nieuwe aan. Elke API-sleutel heeft zijn eigen HMAC-geheim.

V: Kan ik HMAC-validatie uitschakelen voor interne services?
A: Neem contact op met support voor maatwerkoplossingen. HMAC-validatie is verplicht voor alle publieke API-endpoints.

πŸ†˜ Ondersteuning

Hulp nodig?

Probeer het gratis β€” geen aanmelding vereist

Bekijk en test dynamische OG-afbeeldingen in seconden.

Open de gratis OG-afbeeldingstester

A BeCaSimulations site