Token Authentication

最終更新日:2025-09-05 17:34:19

本ガイドでは、トークン認証(タイムスタンプ付きホットリンク防止とも呼ばれます)の設定および利用方法について説明します。このセキュリティ機能は、ライブ配信コンテンツを不正アクセスおよびホットリンクから保護するよう設計されています。

ストリーミングURLに暗号化されたトークンとタイムスタンプを追加することで、誰がどのくらいの期間ストリームへアクセスできるかを制御できます。これにより、有効でかつ期限付きのURLを保有するユーザーのみがコンテンツを視聴でき、ストリームのセキュリティが保たれ、不正な配信拡散を防止できます。

動作原理

認証プロセスは、主に3つの要素で構成されています:

  1. Secret Key: コンソールで設定する秘密キー。このキーはお客様と当社サーバーのみが知っています。
  2. Timestamp: URLの有効期限、もしくは生成された時間を示すタイムスタンプ。
  3. トークン(シグネチャ): シークレットキー、URLパス、およびタイムスタンプを用いてお客様のサーバー側で生成された暗号化されたシグネチャ(ハッシュ)です。

認証済みURLを使用して視聴者がストリームへアクセスしようとすると、当社のエッジサーバーは以下の処理を行います:

  1. リクエストを受信し、URLからトークン、タイムスタンプ、その他のパラメーターを抽出します。
  2. 同じシークレットキーとロジックを使い、サーバー上で再度トークンを生成します。
  3. URLから抽出したトークンとサーバーで生成したトークンを比較します。
  4. タイムスタンプに基づいてURLが有効期限切れかどうかを確認します。

トークンが一致し、かつURLの有効期限が切れていない場合、視聴者はストリームへのアクセスが許可されます。そうでない場合、リクエストは拒否されます。

コンソール設定

トークン認証を有効化および設定するには、以下の手順に従ってください。

  1. 低遅延ストリーミングに移動します。
  2. 設定したいDomainを選択します。
  3. 設定を編集をクリックします。
  4. **タイムスタンプ型ホットリンク防止(ライブ)**セクションに進みます。

以下は、設定パネル内の各項目についての詳細な説明です:

Field 説明 例/デフォルト
Application name このルールを適用するアプリケーションを指定します。空欄の場合はすべてに適用されます。
注意:このApplication nameは、現在ご利用中のDomainで設定したものと一致する必要があります。
live,vod
Ciphertext Parameter Name 暗号化トークン用URLパラメータの名称です。 デフォルト: wsSecret
Time Parameter Name タイムスタンプ用URLパラメータの名称です。 デフォルト: wsTime
KEY トークンの暗号化署名を生成するために使用するプライベートなシークレットキーです。 mysecretkey
Encryption Time Format タイムスタンプのフォーマットです。 UNIX timestamp または Hexadecimal
Validity Period URLの有効期限の管理方法です。 By DurationBy Absolute TimeBy Valid Time、またはDon't Check Time
有効期間 リンクの有効期間(秒単位)。(「有効期間で認証」を選択した場合は必須です) 3600(1時間分)
許容時間誤差 お客様のサーバーと当社エッジサーバー間での僅かな時刻ズレによる有効URLのエラーを防ぐための時間許容値(秒単位)です。 300(5分間)
暗号化文字列結合方式 Token生成時の計算式です。 一般的にはKEY+Path+Timeが用いられます。

認証付きURLの生成

コンソールでこの機能を設定した後、アプリケーションまたはバックエンドサーバーでユーザー向けに動的に認証付きURLを生成するように対応してください。

コアロジックは、お客様が選択した暗号化文字列結合方式に基づいて文字列を生成し、そのMD5ハッシュ値を計算することです。注意: ハッシュ対象の文字列に含まれる具体的な要素は、選択する有効期間方式によって異なります。

例: 「有効期間で設定する」場合

設定が以下のようになっていると仮定します:

  • KEY: mysecretkey
  • 暗号文の組み合わせ方法: KEY+Path+Time
  • 暗号文パラメーター名: wsSecret
  • 時刻パラメーター名: wsTime
  • 暗号化時刻フォーマット: UNIXタイムスタンプ
  • 有効期間: 3600秒(1時間)
  • 元の配信ストリームURL: http://your.domain.com/live/stream1.flv

サーバーで署名付きURLを生成する手順は次のとおりです:

  1. URLパスを取得: パスとは、配信ポイントから始まるURLの部分です。この場合は/live/stream1.flvです。
  2. 現在の時刻を取得: 現在の時刻をUNIXタイムスタンプとして取得します。例:1678886400
  3. 文字列を連結: Key、Path、Timeを選択した方法に従って組み合わせます。
    重要: パスの部分は、発信点以降のURIと完全に一致している必要があります。先頭のスラッシュも含みます。
    string_to_hash = "mysecretkey/live/stream1.flv1678886400"
  4. MD5ハッシュを計算: string_to_hashのMD5ハッシュを計算します。
    wsSecret_value = md5("mysecretkey/live/stream1.flv1678886400")
    結果が b1b5c2c7e8e5e8e5c2c7b1b5c2c7e8e5 だったとします。
  5. 最終URLの構築: トークンとタイムスタンプを元のURLのクエリパラメータとして追加します。
    http://your.domain.com/live/stream1.flv?wsSecret=b1b5c2c7e8e5e8e5c2c7b1b5c2c7e8e5&wsTime=1678886400

このURLを使用する視聴者は、1678886400 + 3600 = 1678890000 までストリームにアクセスできます。

例:有効時間による利用方法

この方法は、生成する各URLごとに有効期間を動的に定義したい場合に便利です。設定内容は前の例と同じですが、有効時間による を選択したと仮定します。

  • KEY: mysecretkey
  • 暗号化結合方法(Ciphertext Combination Method): KEY+Path+Time(注:このモードでは、ハッシュ計算時にタイムスタンプの後にwsKeepTime値が付加されます。)
  • 暗号文パラメータ名(Ciphertext Parameter Name): wsSecret
  • 時間パラメータ名(Time Parameter Name): wsTime
  • 暗号化時間形式(Encryption Time Format): UNIXタイムスタンプ
  • 有効期間(Desired Validity Duration): 7200秒(2時間)
  • オリジナルストリームURL(Original Stream URL): https://your.domain.com/live/stream1.sdp

サーバー側で署名付きURLを生成する手順は以下のとおりです:

  1. URLパスの取得: /live/stream1.sdp
  2. 現在時刻の取得: 1678886400
  3. 有効期間の指定: 7200
  4. 文字列の連結: Key、Path、現在時刻、有効期間(wsKeepTime の値)を組み合わせます。
    string_to_hash = "mysecretkey/live/stream1.sdp16788864007200"
  5. MD5ハッシュの計算: この新しい文字列のMD5ハッシュを計算します。
    wsSecret_value = md5("mysecretkey/live/stream1.sdp16788864007200")
    結果は 20722b11be862a6563657a70a8a8167 です。
  6. 最終URLの生成: wsSecretwsTimewsKeepTime をクエリパラメータとして追加します。
    https://your.domain.com/live/stream1.sdp?wsSecret=20722b11be862a26563657a70a8a8167&wsTime=1678886400&wsKeepTime=7200

この方法は、URLを生成するサーバーが有効期限をその場で設定できるため、より柔軟性があります。