URL認証機能は、ApsaraVideo VODにアップロードされたコンテンツを違法なダウンロードやホットリンクから保護します。 この機能は、ApsaraVideo VODコンソールで設定できます。 このトピックでは、URL認証の仕組みと認証方法Aの設定方法について説明します。
開発の背景
ホットリンクを防ぎ、オリジンリソースを保護するために、リファラーブラックリストまたはホワイトリストを設定して、悪意のあるユーザーを特定してフィルタリングできます。 URL認証は、偽造されたRefererコンテンツをより安全かつ効果的に識別することができる。 ApsaraVideo VODは認証方法Aのみをサポートしています。
URL認証のしくみ
Alibaba Cloud Content Delivery Network (CDN) ノードは、オリジンサーバーと連携してURLを認証します。 これは、オリジンサーバー上のリソースをホットリンクから保護するための、より安全で信頼性の高い方法です。
認証方法 A
- 署名されたURL構造
署名付きURLには、再生ファイルのアドレスとアクセストークン (auth_key) が含まれます。 例:
http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
アクセストークンの値は、認証キーと有効期限に基づいてMD5アルゴリズムによって計算されます。 アクセストークンは、特定の有効期間を有する。 次の表に、署名付きURLのフィールドを示します。フィールド 説明 DomainName ApsaraVideo VODのドメイン名。 ファイル名 オリジンサーバー上の要求されたリソースを指す実際のURL。 Filenameフィールドはスラッシュ ( /
) で始まる必要があります。timestamp URLの有効期限。 値は、UNIXタイムスタンプ形式の10桁の正の整数です。 タイムスタンプは、1970年1月1日00:00:00 UTCから経過した秒数と、有効期間の長さ (秒) の合計です。 有効期間はクライアントによって決定されます。 有効期間が1,800秒に設定されている場合、認証は1,800秒後に期限切れになります。 認証が期限切れになると、HTTP 403ステータスコードが返されます。 - を使用してタイムスタンプを生成できます。 タイムスタンプは、次の式に基づいて計算されます。URLが生成されたUNIX時間 + デフォルトの有効期間。
- コードを使用してURLを生成する場合、タイムスタンプをカスタム値に設定できます。
たとえば、最終有効時間が2022年7月7日のUTC 00:30:00の場合、計算されたタイムスタンプは1657125000です。
rand 乱数。通常は0に設定されます。 毎回異なるURLを生成する場合は、UUIDを使用することを推奨します。 ハイフン ( -
) は使用できません。 例: 477b3bbc253f467b8def6711128c7bec。uid ユーザー ID。 このフィールドを0に設定します。 md5hash MD5アルゴリズムを使用して計算される文字列。 文字列の長さは32文字で、数字と小文字を使用できます。 sstring = "URI-timestamp-rand-uid-PrivateKey" md5hash = md5sum(sstring)
- URI: 要求されたファイルの相対パス。 パスはパラメーターを除外します。 例: /Filename。
- PrivateKey: ApsaraVideo VODコンソールで設定されている認証キー。 主キーまたは副キーを使用できます。
一次キーと二次キーは等しく有効である。 セカンダリキーは、スムーズな切り替えを保証するために使用されます。 主キーが変更されると、元の主キーを持つすべての生成されたストリーミングURLはすぐに無効になります。 プライマリキーをセカンダリキーに切り替えると、元のプライマリキーを使用する生成されたストリーミングURLは一定期間有効です。 これにより、スムーズな切り替えが保証されます。 セカンダリキーは引き続き使用できます。
- md5sum: MD5ハッシュ値の計算に使用される関数。 開発言語によって提供されるMD5ハッシュ計算関数を使用します。
- 認証ロジック
CDNノードがリクエストを受信すると、CDNノードは、コンソールで設定された
タイムスタンプ
とデフォルトの有効期間
を追加して計算された時間が現在の時間より前かどうかを判断します。タイムスタンプ
とデフォルト有効期間
を追加して計算された時間が現在の時間よりも前の場合、CDNノードはURLが期限切れであると判断し、403ステータスコードを返します。timestamp
とデフォルトの有効期間
を追加して計算された時刻が現在の時刻より後の場合、CDNノードは同じ形式の文字列を生成します。 次に、MD5アルゴリズムを使用してHashValue
を計算し、リクエスト内のmd5hash
値と比較します。- 両方の値が同じ場合、要求は認証を通過します。 CDNノードは、要求されたリソースを返します。
- 両方の値が異なる場合、リクエストは認証に失敗します。 CDNノードは403ステータスコードを返します。
使用方法
URL認証ページでURL認証を設定して有効にする必要があります。 詳細については、「t1959280.html#multiTask774」をご参照ください。
-
URL認証を有効にした後、すべてのリソースがApsaraVideo VODコンソールにある場合、コンソールは有効期限付きの署名付きURLを自動的に生成します。 GetPlayInfo APIを呼び出して、署名付きURLを取得することもできます。注 URL認証を有効にすると、ビデオ、オーディオ、サムネイル、スナップショットファイルのURLが署名されます。
- URL認証を有効にした後、リソースがApsaraVideo VODコンソールにない場合、認証方法Aを使用して署名付きURLを結合し、動的署名付きURLを生成できます。 詳細については、「認証方法A」および署名付きURLスプライシングのサンプルをご参照ください。
署名付きURLスプライシングのサンプル
- オリジンサーバーからリソースを取得します。
http://example.aliyundoc.com/video/standard/test****.mp4
重要 back-to-originリクエストオブジェクトに漢字がある場合は、署名付きURLを結合する前にURLをエンコードする必要があります。 - 暗号キーをaliyunvodexp1234に設定します。
- URLの有効期限を2021年8月1日のUTC 00:00:00に設定した場合、タイムスタンプは1627747200になります。
- 署名文字列を生成します。
CDNノードは、
Hashvalue
を計算するための署名文字列を生成します。/ビデオ /標準 /test.mp4-1627747200-0-0-aliyunvodexp1234
- MD5値を計算します。
CDNノードは、署名文字列に基づいて
Hashvalue
を計算します。HashValue = md5sum("/video/standard/test.mp4-1627747200-0-0-aliyunvodexp1234") = 0e9048c8c7de46b6015618f42de79bc2
- 署名付きURLを生成します。
http://example.aliyundoc.com/video/standard/test.mp4?auth_key=1627747200-0-0-0e9048c8c7de46b6015618f42de79bc2
CDNノードによって計算されたHashValue
がリクエストに含まれるmd5hash
と同じ (両方とも0e9048c8c7de46b6015618f42de79bc 2
) 場合、リクエストは認証を通過します。 そうでない場合、要求は認証に失敗します。