埋め込みトークンと署名付きURL
動画の再生可否を制御する2つのパターン: 不透明な埋め込みトークン(サーバー側でルックアップ)と署名付きURL(HMAC署名のクエリ文字列)。両者ともに広く使われ、トレードオフが異なります。
埋め込みトークン(不透明)
サーバー側でアクセスメタデータ(動画ID、許可オリジン、有効期限、ウォーターマーク用視聴者ID、レート制限)にマッピングされる短い不透明な文字列。
長所:
- リアルタイム取消 — DBでトークンを無効化すれば、次の鍵取得から失敗する。
- 豊富なメタデータ — トークンごとの分析、カスタムレート制限、動的ウォーターマークの紐付け。
- 短く綺麗なURL —
/watch/abc123。
短所:
- サーバー側状態 — 鍵取得のたびにDBルックアップでトークンを検証する。
- キャッシュミス時にレイテンシがやや高い。
採用例: AVCaption。
署名付きURL(HMAC)
URLに暗号学的署名を付加する方式: /segment.ts?expires=1735689600&sig=abcdef...。プラットフォームサーバーが秘密鍵で署名を計算し、エッジで検証 — DBルックアップは不要です。
長所:
- ステートレス — CDNエッジでサーバー往復なしに検証可能。
- 高速 — 暗号学的検証はマイクロ秒オーダー。
短所:
- 取消不可 — 一度署名すれば有効期限まで有効。
- メタデータが少ない — URLパラメータに収まる範囲。
- URLが長い。
採用例: AWS S3 presigned URL、CloudFront署名URL、Cloudflare Stream署名URL。
それぞれの使い分け
**埋め込みトークン(不透明)**が適するのは:
- 発行後にアクセスを取り消す必要がある(返金、アカウント停止)
- 視聴者ごとの分析や動的ウォーターマークが必要
- 埋め込み用に短く綺麗なURLが欲しい
署名付きURLが適するのは:
- DBルックアップのオーバーヘッドが効いてくる超大規模で運用している
- 取消が不要(短い有効期限で十分)
- 配信レイヤー(CDNエッジ)が署名検証をネイティブ対応している
有料講座や限定コンテンツには不透明な埋め込みトークンが向き、単発の公開配信には署名付きURLがシンプルです。
AVCaptionは不透明トークンを採用し、動的アクセス制御のためにREST API経由のセッションごと生成も提供します。