悪意のあるダウンロードやサイトリソースの盗難を防ぐために、Referer ブラックリスト / ホワイトリストを設定して、訪問者を識別およびフィルタリングできます。また、署名付きアップストリーミング URL とストリーミング URL を使用して、オリジンサーバー上のリソースをより適切に保護できます。このトピックでは、URL 署名機能の仕組み、設定方法、および使用上の注意事項について説明します。
署名付き URL の構築
署名付き URL は、PC およびモバイルデバイス上のサードパーティのアップストリーミングツールとプレーヤーでサポートされています。アップストリーミング URL またはストリーミング URL とアクセストークンで構成されます。例:
rtmp://push.aliyundoc.com/app/stream?auth_key=1740562218-0-0-183e22e*********auth_key フィールドは、アクセストークンを示します。
アクセストークンの構造
timestamp-rand-uid-md5hashタイムスタンプ:UNIX タイムスタンプ (秒単位)。署名付き URL の有効期限は、タイムスタンプに署名付き URL の有効期間を加えたものです。
ApsaraVideo Live コンソールで URL ジェネレーターを使用して署名付き URL を生成する場合、タイムスタンプは現在の日時です。この場合、有効期限 = 現在の日時 + 有効期間。
連結ルールを使用して署名付き URL を生成する場合、タイムスタンプを指定できます。たとえば、タイムスタンプを現在の日時に 3,600 秒を加えた値に設定すると、有効期限 = 現在の日時 + 3,600 秒 + 有効期間。タイムスタンプを現在の日時に設定すると、有効期限 = 現在の日時 + 有効期間。
rand:乱数。通常は 0 に設定されます。
毎回異なる URL を生成するには、UUID を乱数として使用することをお勧めします。値にはハイフン (-) を含めることはできません。例:
477b3bbc253f467b8def6711128c7****。uid:追加パラメーター。使用されません。通常は 0 に設定されます。
md5hash:MD5 アルゴリズムを使用して計算された文字列。長さは 32 文字で、数字と小文字が含まれています。
暗号化コード:
sstring = "URI-timestamp-rand-uid-PrivateKey" md5hash = md5sum(sstring)たとえば、アップストリーミング URL が
rtmp://push.aliyundoc.com/app/streamの場合、暗号化コンテンツは/app/stream-timestamp-rand-uid-ドメイン名の認証キーです。
URL 署名機能の使用
署名付き URL を使用するには、ドメイン名に対して URL 署名機能を有効にする必要があります。URL 署名は、初めてドメイン名を追加するときにデフォルトで有効になります。詳細については、「URL 署名機能の設定」をご参照ください。ApsaraVideo Live コンソールで、または連結ルールを使用して、署名付き URL を生成できます。詳細については、「アップストリーミング URL とストリーミング URL を生成する」をご参照ください。
URL 署名機能の仕組み
URL 署名機能が有効になると、サーバーは以下の操作を実行してリクエストを検証します。
サーバーは、リクエスト内のタイムスタンプが現在の日時よりも前であるかどうかを確認します。
タイムスタンプが現在の日時よりも前の場合、サーバーは署名付き URL が期限切れと見なし、HTTP ステータスコード 403 を返します。
タイムスタンプが現在の日時よりも後の場合、サーバーは以下の sstring 式を使用して文字列を構築します。
サーバーは MD5 アルゴリズムを使用して文字列のハッシュ値を計算し、そのハッシュ値をリクエストに含まれるハッシュ値と比較します。
2 つの値が同じ場合、認証は成功です。サーバーはライブストリームを返します。
2 つの値が異なる場合、認証は失敗です。サーバーは HTTP ステータスコード 403 を返します。
ハッシュ値は、以下の式に基づいて計算されます。
sstring = "URI-timestamp-rand-uid-PrivateKey"
HashValue = md5sum(sstring)例
前提条件:
req_auth を使用して
rtmp://demo.aliyundoc.com/video/standard****オブジェクトをリクエストします。暗号キーを aliyunliveexp1234 (ApsaraVideo Live コンソールで設定されたプライマリキーまたはセカンダリキー) に設定します。
署名付き URL が生成された日時は、2021 年 5 月 28 日 16:49:57 (UTC + 08:00) です。
ApsaraVideo Live コンソールで、署名付き URL の有効期間を 40 分に設定します。
rand フィールドと uid フィールドの両方を 0 に設定します。
結果:
計算された署名付き URL の UNIX タイムスタンプは 1622194197 で、これは 2021 年 5 月 28 日 17:29:57 (UTC + 08:00) を示します。
サーバーは、ハッシュ値の計算に使用される署名文字列を構築します。
/video/standard-1622194197-0-0-aliyunliveexp1234サーバーは、この署名文字列に基づいてハッシュ値を計算します。
HashValue = md5sum("/video/standard-1622194197-0-0-aliyunliveexp1234") = 5552ff52b5e4e20387c6dc18afce****リクエストの URL は
rtmp://demo.aliyundoc.com/video/standard****?auth_key=1622194197-0-0-5552ff52b5e4e20387c6dc18afce****です。説明auth_key フィールドは、署名付き URL に含まれるアクセストークンを示します。
計算されたハッシュ値は
md5hash = 5552ff52b5e4e20387c6dc18afce****で、リクエストに含まれるハッシュ値と同じです。この場合、認証は成功です。
使用上の注意事項
デフォルトでは、URL 署名機能は有効になっています。コンテンツの著作権侵害を防ぐために、この機能を有効にしておくことをお勧めします。URL 署名機能を無効にする場合は、リソースの不正使用のリスクを理解し、ApsaraVideo Live コンソールの URL 署名ページの「URL 署名機能の無効化に関する免責事項」に同意する必要があります。
auth_key フィールドは手動で設定する必要があります。ApsaraVideo Live は、auth_key フィールドの値を計算するための API 操作を提供していません。
URL 署名機能を有効にした後、アップストリーミング URL とストリーミング URL に auth_key フィールドを追加する必要があります。そうしないと、ライブストリームは再生されません。アップストリーミング URL またはストリーミング URL のみに署名することはできません。両方に署名する必要があります。
署名付き URL は、有効期限のタイムスタンプまで有効です。期限切れになる前にいつでも署名付き URL にアクセスできます。ApsaraVideo Live は、ワンタイム署名付き URL をサポートしていません。
auth_key フィールドの値は、queryString フィールドを含まない URI の MD5 値です。詳細については、前述の署名付き URL の構築セクションをご参照ください。アップストリーミング URL とストリーミング URL の両方の URI は、AppName/StreamName です。アップストリーミング URL が機密でない場合は、有効期限のタイムスタンプをできるだけ近くに設定することをお勧めします。これにより、ストリーミング URL への悪意のあるアクセスを防ぎます。
リアルタイムメッセージングプロトコル (RTMP)、FLV、およびリアルタイムストリーミング(RTS) 形式のアップストリーミング URL とストリーミング URL の場合、リクエストは、ストリームのアップストリーミングまたはストリーミングの開始時にのみ認証されます。プロセス中に署名付き URL が期限切れになっても、進行中のストリームのアップストリーミングまたはストリーミングは中断されません。
M3U8 形式のストリーミング URL の場合、リクエストは、ストリーミングの開始時とストリーミングの進行中に認証されます。プロセス中に署名付き URL が期限切れになると、進行中のストリーミングは中断されます。
署名付き URL の有効期間を動的に制御する場合は、関連する SDK を使用して AppName パラメーターと StreamName パラメーターを動的に指定します。詳細については、「URL 署名のサンプルコード」をご参照ください。