Emne

HMAC-godkendelse og sikkerhed

Beskyt dine HMAC-signerede OG-billed-URL'er med FastOG's HMAC-SHA256-godkendelse. Denne guide dækker signering, validering og fejlfinding af hver anmodning, så du kan levere dynamiske Open Graph-billeder i farten — abonnementsbegrænset, med ubegrænsede renders (uden månedlig render-kvote og uden overforbrugsafregning). Tilmeld dig, vælg en Dynamic API-plan, og opret derefter din API-nøgle og HMAC-hemmelighed i dashboardet (betalt API-renders er rene). Signér på din server én gang, og integrér på få minutter.

🚀 Hurtig start

Ny til HMAC-signering? Start her:

  1. Guide til hurtig start — Kom i gang på 5 minutter
  2. JavaScript-tutorial — Komplet guide til Node.js/Next.js-udviklere
  3. Alle framework-tutorials — vælg din stack:

📚 Dokumentationsindeks

Kernekoncepter

  • HMAC-signaturguide — Komplet reference med algoritmedetaljer, krav og eksempler i JavaScript, PHP og Python
  • HMAC-validering — Implementeringsdetaljer på serversiden, sikkerhedsfunktioner og fejlsvar

Vejledninger

Hurtig reference

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>

Forespørgselsparametre

Parameter Beskrivelse Eksempel
key Fuld API-nøgle sk_quick_123abc
s HMAC-SHA256-signatur (64 hex-tegn) 9f8a1b2c3d4e...

Fejlkoder

Kode HTTP-status Beskrivelse
missing_signature 401 Manglende key- eller s-parameter
invalid_signature 401 Signaturen stemmer ikke

🎯 Anvendelsestilfælde

Blogindlæg

Generér dynamiske OG-billeder til blogindlæg:

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

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

E-handelsprodukter

Opret OG-billeder til produktsider:

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

Udtalelser

Generér OG-billeder til udtalelsescitater:

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

🔐 Sikkerhed

Bedste praksis

  1. Opbevar hemmeligheder sikkert — Brug miljøvariabler eller en hemmelighedsmanager
  2. Udsæt aldrig HMAC-hemmeligheden i klientkode — Signér kun på serveren
  3. Brug HTTPS — Forhindrer MITM-angreb
  4. Roter hemmeligheder jævnligt — Især hvis de er kompromitteret
  5. Overvåg fejlede signaturer — Gentagne fejl kan indikere angreb
  6. Isolering pr. bruger — Hver API-nøgle har sin egen HMAC-hemmelighed

Sådan får du din HMAC-hemmelighed

  1. Gå til Dashboard → API-nøgler
  2. Opret en ny API-nøgle
  3. Kopiér HMAC-hemmeligheden (vises kun én gang!)
  4. Gem den i miljøvariabler
bash
# .env
FASTOG_HMAC_SECRET=<your-64-char-hex-secret>

🧪 Testning

Generér test-URL

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);
"

Test med curl

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

Forventede svar

  • ✅ Gyldig signatur → Returnerer OG-billede (eller 422, hvis skabelonparametrene er ugyldige)
  • ❌ Ugyldig signatur → {"code": "invalid_signature"}
  • ❌ Manglende parametre → {"code": "missing_signature"}

🛠 Fejlfinding

Signatur matcher ikke

  1. Bekræft, at du bruger den korrekte HMAC-hemmelighed (tjek API-nøglen i dashboardet)
  2. Tjek den kanoniske forespørgsel: alle forespørgselsparametre undtagen s (inklusive key), værdier rfc3986-kodet, nøgler sorteret leksikografisk
  3. Bekræft, at signaturen er små bogstaver i hex (64 tegn)

📖 Yderligere ressourcer

❓ FAQ

Spørgsmål: Hvorfor forespørgselsparametre i stedet for headere?
Svar: OG-billeder hentes af sociale netværkscrawlere (LinkedIn, Twitter, Facebook), som ikke sender brugerdefinerede headere. Signaturen SKAL være i URL'en.

Spørgsmål: Kan jeg bruge den samme signatur til flere forespørgsler?
Svar: Ja. En signatur beregnes ud fra den nøjagtige forespørgsel (minus s), så den samme signerede URL forbliver gyldig, så længe parametrene ikke ændres. Ændrer du en parameter (inklusive key), skal du underskrive igen.

Spørgsmål: Skal jeg underskrive forespørgsler for alle skabeloner?
Svar: Ja. Alle forespørgsler til /api/v1/og kræver HMAC-signaturer.

Spørgsmål: Hvad sker der, hvis min HMAC-hemmelighed bliver kompromitteret?
Svar: Tilbagekald API-nøglen i dashboardet, og opret en ny. Hver API-nøgle har sin egen HMAC-hemmelighed.

Spørgsmål: Kan jeg deaktivere HMAC-validering for interne tjenester?
Svar: Kontakt support for brugerdefinerede løsninger. HMAC-validering er obligatorisk for alle offentlige API-endepunkter.

🆘 Support

Har du brug for hjælp?

Prøv det gratis – ingen tilmelding nødvendig

Forhåndsvis og test dynamiske OG-billeder på få sekunder.

Åbn den gratis OG-billedtester

A BeCaSimulations site