Embed-token vs signed URL
Twee patronen om te bepalen wie een video mag afspelen: opaque embed-tokens (server-side opzoeken) en signed URLs (HMAC-ondertekende querystrings). Beide zijn gangbaar; de afwegingen verschillen.
Embed-tokens (opaque)
Een korte, opaque string die server-side wordt gemapt naar toegangsmetadata: video-ID, toegestane origins, vervaltijd, kijker-ID voor watermerk, rate limits.
Voordelen:
- Realtime intrekken — invalideer het token in de DB en de eerstvolgende sleutel-fetch faalt.
- Rijke metadata — analytics per token, maatwerk rate limits, koppeling met dynamisch watermerk.
- Korte, schone URLs —
/watch/abc123.
Nadelen:
- Server-side state — elke sleutel-fetch valideert het token via DB-lookup.
- Iets hogere latency bij niet-gecachete lookups.
Gebruikt door: AVCaption.
Signed URLs (HMAC)
Een URL met een aangehangen cryptografische handtekening: /segment.ts?expires=1735689600&sig=abcdef.... De handtekening wordt berekend door de platformserver met een geheime sleutel en aan de edge geverifieerd — geen DB-lookup nodig.
Voordelen:
- Stateless — verifieerbaar aan de CDN-edge zonder serverroundtrip.
- Snel — cryptografische check in microseconden.
Nadelen:
- Geen intrekken — eenmaal ondertekend, geldig tot vervaldatum.
- Minder metadata — alleen wat in URL-parameters past.
- Langere URLs.
Gebruikt door: AWS S3 presigned URLs, CloudFront signed URLs, Cloudflare Stream signed URLs.
Wanneer wat zinnig is
Embed-token (opaque) is juist als:
- Je toegang na uitgifte moet intrekken (terugbetalingen, accountopschorting)
- Je analytics per kijker of dynamisch watermerk wilt
- Je korte, schone URLs voor embedding wilt
Signed URL is juist als:
- Je op massale schaal werkt waarbij DB-lookup-overhead telt
- Intrekken geen vereiste is (een korte vervaltijd volstaat)
- Je leveringslaag (CDN-edge) handtekeningen native verifieert
Voor betaalde cursussen en afgeschermde inhoud zijn opaque embed-tokens de betere keuze. Voor eenmalige openbare distributie zijn signed URLs simpeler.
AVCaption gebruikt opaque tokens met optionele per-sessie-generatie via REST-API voor dynamische toegangscontrole.