署名付きURLとembedトークン — セッション単位の動画アクセス制御

署名付きURLとembedトークン

AVCaptionの全動画はURLにembedトークンを持ちます: https://avcaption.com/watch/{embed_token}。トークンはアクセス資格情報 — 有効なトークンを持つ人は再生でき、持たない人は拒否されます。

無料または公開コンテンツでは動画ごとに1つのトークンを生成し、ずっと有効です。有料またはゲーテッドコンテンツでは、認証セッションごとにREST API経由で新しいトークンを生成します。

トークンの仕組み

トークンは短い不透明な文字列(既定で32文字16進)です。サーバー側で以下にマッピングされます:

  • 動画ID
  • 任意の視聴者識別子(分析と動的ウォーターマーク用)
  • 失効タイムスタンプ
  • 許可オリジンのリスト(あなたのドメインホワイトリスト)
  • レート制限メタデータ

プレーヤーがストリーム鍵を要求すると、サーバーはトークンを検証し、有効期限を確認し、要求元オリジンを確認し、その後初めて次のバッチ用のAES-128鍵を発行します。

REST API経由のセッション単位トークン

有料コンテンツでの推奨パターン:

  1. ユーザーがあなたのアプリにログイン。
  2. アプリがDBに対してユーザーを認証。
  3. アプリがAVCaptionのREST APIを呼び出し: POST /api/v1/embed-token{video_id, viewer_id, expires_in: 3600}
  4. AVCaptionが1時間有効なワンタイムembedトークンを返却。
  5. そのトークンでiframeをレンダリング。
  6. トークンが失効; ユーザーがリフレッシュするとアプリが新しいトークンを生成。

つまりiframe URLをコピーして共有したユーザーが渡すのは1時間以内に失効するトークン — 再配布には使えません。

トークン単位のドメインホワイトリスト

トークンは特定のオリジンに紐付けられます。app.example.com 用に発行されたトークンは pirate-site.com で埋め込んでも動きません。ブラウザはマスタープレイリスト要求時にRefererヘッダーを送り、AVCaptionがホワイトリストに照らして検証し、鍵発行を拒否します。

署名付きURLアプローチとの比較

一部のプラットフォームは署名付きURL(各セグメントにHMAC署名のクエリ文字列)を使います。AVCaptionは不透明なトークンを使い、サーバー側でアクセスメタデータにマッピングします。トレードオフ:

  • 署名付きURL — 完全にステートレスで、エッジで簡単に検証可能。ただし一度署名されたURLは有効期限まで失効できません。
  • 不透明トークン(AVCaption) — ストリームセッションごとにサーバー側ルックアップが必要ですが、リアルタイム失効、トークン単位の分析、より豊富なアクセスメタデータが可能になります。

失効が重要な有料コンテンツでは不透明トークンが勝ります。より深い比較は embedトークン vs 署名付きURL のglossaryを参照してください。

トークンローテーション

非常に高価値のコンテンツでは、API経由でスケジュールに沿ってトークンをローテーションします:

POST /api/v1/embed-token/rotate
{ "video_id": "abc123" }

これでその動画の既存トークンをすべて無効化し、新しいトークンを発行します。漏洩疑いやチャージバック後に有用です。

TTLの使い分け

TTL ユースケース
5分 ダウンロード形式の単発配信(有料デジタルプロダクト、単回レビューリンク)
1時間 標準的な認証セッション(メンバーポータル、コースプレイヤー)
24時間 無料の公開コンテンツ、マーケティング動画
30日 期間限定レンタル、月次ボーナスコンテンツ

短いTTLはセキュリティを上げ、長いTTLはトークン発行APIコールを減らします。多くの有料コンテンツでは1時間が適切なデフォルトです。

はじめる

embedトークンはアップロード時に全プランで自動発行されます。セッション単位のトークン生成REST APIはEnterprise機能です——認可チェックに組み込めば、セッションが切れたときに自動失効するトークンを発行できます。フリーアカウントを作成し、動画を1本アップロードして、デフォルトの24時間トークンが期待通りに失効することを確認してみてください。よくあるパターン:オンラインコースメンバーシップサイト動画でのセッション単位トークン。

よくあるご質問

動画の署名付きURLとは何ですか? +
署名付きURLは、URLがオリジンサーバーから発行されたことを証明する暗号署名をクエリ文字列に含む動画再生リンクです。CDNエッジまたはオリジンが署名を検証してからセグメントを提供し、改竄や期限切れのURLは拒否されます。署名付きURLは、エッジでユーザーごとの状態を持たずに有料プラットフォームが動画アクセスを制限することを可能にします。
embedトークンの有効期間はどれくらいですか? +
既定は24時間です。動画ごとに5分から30日まで設定可能、またはREST API経由でセッションごとに新しいトークンを生成できます。高価値コンテンツでは、認証セッションごとに発行する短命トークンが推奨パターンです。
再生中にトークンを失効させられますか? +
はい。ダッシュボードまたはAPIから失効させます。そのセッションの次の鍵要求が失敗 — 再生は60秒以内(次のバッチ境界)で停止します。
署名付きURLとembedトークン、どちらを使うべきですか? +
失効が重要な有料コンテンツにはembedトークン、エッジでステートレス検証したい場合は署名付きURLです。AVCaptionは不透明なembedトークンを採用し、サーバー側でアクセスメタデータにマッピングするため、漏洩トークンを即座に失効できます。純粋な署名付きURLはステートレスですが、有効期限前に失効できません。完全なトレードオフはembedトークン vs 署名付きURLの比較を参照してください。
← content.back_to_index