悪意のあるダウンロードやサイトリソースの盗難を防ぐために、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-md5hashtimestamp: UNIX タイムスタンプ (秒単位)。最終的な有効期限は、この値にドメインの URL 署名有効期間を加算することで決定されます。
ApsaraVideo Live コンソールで URL ジェネレーターを使用して署名付き URL を生成する場合、タイムスタンプは現在時刻です。この場合、次の数式が適用されます。有効期限 = 現在時刻 + 有効期間。
連結ルールを使用して署名付き URL を構築する場合、タイムスタンプを指定できます。たとえば、タイムスタンプを現在時刻に 3,600 秒を加算した値に設定した場合、次の数式が適用されます。有効期限 = 現在時刻 + 3,600 秒 + 有効期間。タイムスタンプを現在時刻に設定した場合、次の数式が適用されます。有効期限 = 現在時刻 + 有効期間。
rand: 乱数。通常は 0 です。
生成される各 URL が一意であることを保証するために、乱数には UUID 形式を使用します。UUID にはハイフン (-) を含めることはできません。例:
477b3bbc253f467b8def6711128c7****。uid: 追加パラメーター。現在使用されていません。通常は 0 です。
md5hash: MD5 アルゴリズムを使用して計算された検証文字列。数字 (0-9) と小文字の英字 (a-z) の 32 文字の文字列で構成されます。
暗号化コンテンツ
sstring = "URI-timestamp-rand-uid-PrivateKey" md5hash = md5sum(sstring)たとえば、アップストリーミング URL が
rtmp://push.aliyundoc.com/app/streamの場合、暗号化用の文字列は/app/stream-timestamp-rand-uid-Domain authentication Keyです。
使用方法
署名付き URL を使用するには、ドメイン名に対して URL 署名機能を有効にする必要があります。URL 署名は、ドメイン名を初めて追加するときにデフォルトで有効になります。詳細については、「URL 署名の設定」をご参照ください。署名付き URL は、ApsaraVideo Live コンソールで、または連結ルールを使用して生成できます。詳細については、「アップストリーミング URL およびストリーミング URL の生成」をご参照ください。
仕組み
URL 署名が有効になると、サーバーは次の操作を実行してリクエストを検証します。
サーバーは、リクエスト内のタイムスタンプが現在時刻より前であるかどうかを確認します。
タイムスタンプが現在時刻より前の場合、サーバーは署名付き URL が有効期限切れであると判断し、HTTP ステータスコード 403 を返します。
タイムスタンプが現在時刻より後の場合、サーバーは次の sstring 数式を使用して文字列を構築します。
サーバーは、MD5 アルゴリズムを使用して文字列のハッシュ値を計算し、そのハッシュ値をリクエストに含まれるハッシュ値と比較します。
2 つの値が同じ場合、認証は成功します。サーバーはライブストリームを返します。
2 つの値が異なる場合、認証は失敗します。サーバーは HTTP ステータスコード 403 を返します。
HashValue は、次の文字列から派生します。
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) です。
コンソールで、署名付き 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 に含まれるアクセストークンを示します。
計算された HashValue は、ユーザーのリクエスト内の
md5hash = 5552ff52b5e4e20387c6dc18afce****の値と一致します。認証は成功します。
注意事項
デフォルトでは、URL 署名は有効になっています。コンテンツが不正に複製されるのを防ぐため、この機能を有効なままにしておくことを推奨します。URL 署名を無効にする場合は、リソースの不正利用に伴うリスクを十分に理解し、ApsaraVideo Live コンソールの URL 署名 ページにある「URL 署名の無効化に関する免責事項」に同意する必要があります。
`auth_key` フィールドは手動で設定する必要があります。ApsaraVideo Live は、`auth_key` フィールドの値を計算するための API 操作を提供していません。
URL 署名を有効にした後、`auth_key` フィールドをアップストリーミング URL およびストリーミング URL に追加する必要があります。そうしないと、ライブストリームを再生できません。アップストリーミング 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 署名のサンプルコード」をご参照ください。