URL 署名は、ご利用のサイト上のリソースを不正なダウンロードや使用から保護します。Alibaba Cloud CDN は、4 種類の URL 署名を提供しています。このトピックでは、タイプ F 署名の仕組みと例について説明します。
仕組み
タイプ F 署名の署名付き URL の構造
アクセス URL のフォーマット:
http://DomainName/FileName?{sign=<md5hash>&time=<timestamp>}説明{}内のコンテンツは、標準 URL に追加される暗号化された情報を表します。アクセス URL には中国語文字を含めることはできません。
URL 署名は、疑問符 (
?) を含む URL には対応していません。
フィールドの説明
フィールド
説明
DomainName
ご利用の CDN サイトのドメイン名です。
PrivateKey
カスタム暗号鍵です。長さは 16~32 文字で、大文字、小文字、数字を含めることができます。
FileName
実際のオリジンフェッチのための URL です。署名のためには、FileName は
/で始まる必要があります。timestamp
署名サーバーが署名付き URL を生成する時刻です。このフィールドは、[署名付き URL の有効期間] とともに、署名付き URL の有効期限を決定します。この時刻は、署名サーバーからの UNIX タイムスタンプです。UNIX タイムスタンプは、1970 年 1 月 1 日 00:00:00 (UTC) から経過した秒数です。これは 10 桁の正の 10 進整数であり、タイムゾーンには依存しません。タイムスタンプは 16 進数フォーマットで表されます。
説明ほとんどの場合、署名付き URL の有効期間は CDN に設定された有効期間です。署名付き URL を生成する際に有効期間を延長する場合、`timestamp` = UNIX タイムスタンプ + 延長期間となります。署名付き URL の実際の有効期間は、`timestamp` + CDN に設定された期間です。
md5hash
MD5 アルゴリズムを使用して計算される文字列です。これは、数字 0~9 と小文字 a~z で構成される 32 文字の固定長文字列です。
md5hashの値は、次の文字列から計算されます。sstring = "Privatekey+URI+timestamp" (URI はリクエストされたオブジェクトの相対アドレスであり、/Filename のようなパラメーターは含みません) md5hash = md5sum(sstring)認証ロジック
CDN サーバーがリソースへのアクセスリクエストを受信すると、
timestamp+有効期間が現在時刻より前かどうかをチェックします。timestamp+有効期間が現在時刻より前の場合、サーバーは URL が期限切れであると判断し、HTTP 403 エラーを返します。timestamp+有効期間が現在時刻より後の場合、サーバーはsstringフォーマットで文字列を構築します (sstringの構築メソッドについては表をご参照ください)。次に、サーバーは MD5 アルゴリズムを使用してmd5hash値を計算し、計算されたmd5hash値をユーザーリクエスト内のmd5hash値と比較します。値が一致する場合、認証は成功し、リソースが返されます。
説明認証が成功すると、署名パラメーターが URL から削除され、URL は元のフォーマットに復元されます。これにより、キャッシュヒット率が向上し、back-to-origin トラフィックが削減されます。例:
署名付き URL のフォーマット:
http://DomainName/FileName?{sign=<md5hash>&time=<timestamp>}認証成功後:
キャッシュキーの生成に使用される URL フォーマット:
http://DomainName/FileNameオリジンフェッチに使用される URL フォーマット:
http://DomainName/FileName
値が一致しない場合、認証は失敗し、サーバーは HTTP 403 エラーを返します。
署名付き URL の例
次の例は、タイプ F 署名を実装する方法を示しています。
前提条件
元のリクエスト:
http://domain.example.com/test.flv説明リクエスト URL に中国語文字やその他の非 ASCII 文字が含まれている場合は、まず URL をエンコードする必要があります。次に、エンコードされた URL を使用してハッシュ化のための文字列を構築します。例:
元の URL:
https://example.com/image/AlibabaCloud.jpgエンコードされた URL:
https://example.com/image/%E9%98%BF%E9%87%8C%E4%BA%91.jpg
PrivateKey の値:
aliyuncdnexp1234。timestamp の値:
55CE8100。
スティッチングフロー
CDN サーバーは、
md5hashを計算するためにハッシュ化される文字列を構築します。aliyuncdnexp1234/test.flv55CE8100この文字列に基づいて、CDN サーバーは
md5hash値を計算します。md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd署名付き URL を生成します。
署名付き URL のフォーマット:
http://domain.example.com/test.flv?sign=a37fa50a5fb8f71214b1e7c95ec7a1bd&time=55CE8100
クライアントが署名付き URL を使用してリソースにアクセスすると、CDN サーバーは md5hash 値を計算します。計算された値が a37fa50a5fb8f71214b1e7c95ec7a1bd であり、リクエスト内の md5hash 値と一致し、かつ URL が期限切れでない場合、認証は成功します。それ以外の場合、認証は失敗します。