URL 署名機能は、サイト上のリソースを不正なダウンロードや使用から保護します。Alibaba Cloud の Content Delivery Network (CDN) は、4 つの署名方式を提供しています。このトピックでは、タイプ B 署名の仕組みと例について説明します。
仕組み
タイプ B 署名における署名付き URL の構造
http://DomainName/{<timestamp>/<md5hash>}/FileName説明「
{}」の内容は、標準 URL に追加される暗号化された情報を表します。認証フィールド
フィールド
説明
DomainName
ご利用の CDN サイトのドメイン名です。
timestamp
署名サーバーが署名付き URL を生成する時刻です。このフィールドは、有効期間 と併せて、署名付き URL の有効期限を制御します。時刻は UTC + 08:00 を基準とし、フォーマットは YYYYMMDDHHMM です。
説明ほとんどの場合、署名付き URL の有効期間は、CDN で設定された有効期間と一致します。署名付き URL を生成する際に有効期間を延長した場合、`timestamp` = UNIX タイムスタンプ + 延長期間 となります。署名付き URL の実際の有効期間は、`timestamp` + CDN で設定された期間です。
md5hash
MD5 アルゴリズムで計算された検証文字列です。0~9 の数字および a~z の小文字から構成される、32 文字の固定長文字列です。
md5hashの値は、以下の文字列から計算されます。sstring = "Privatekey+timestamp+Path" (Path は、パラメーターを含まない要求オブジェクトの相対アドレスであり、例:/Filename) md5hash = md5sum(sstring)Filename
オリジンフェッチでアクセスするファイルのパスです。認証のために、Filename は必ず
/で始める必要があります。認証ロジック
CDN サーバーはリソースアクセスリクエストを受信すると、
timestampと有効期間の合計が現在時刻より前かどうかを確認します。timestampと有効期間の合計が現在時刻より前の場合、サーバーは URL が期限切れであると判断し、HTTP 403 エラーを返します。timestampと有効期間の合計が現在時刻より後の場合、サーバーはsstringフォーマットで文字列を構築します。フォーマットの詳細については、表のsstringフォーマットをご参照ください。次に、サーバーは MD5 アルゴリズムを使用してmd5hash値を計算します。その後、サーバーは計算されたmd5hash値を、アクセスリクエスト内のmd5hash値と比較します。値が一致する場合、認証は成功し、リソースが返されます。
説明認証が成功すると、認証パラメーターは URL から削除され、URL は元のフォーマットに復元されます。これにより、キャッシュヒット率が向上し、オリジンへのトラフィックが削減されます。例:
認証パラメーター付きの URL:
http://DomainName/{<timestamp>/<md5hash>}/FileName認証成功後:
キャッシュキーの生成に使用される URL:
http://DomainName/FileNameオリジンフェッチに使用される URL:
http://DomainName/FileName
値が一致しない場合、認証は失敗し、HTTP 403 エラーが返されます。
署名付き URL の例
次の例は、タイプ B 署名の仕組みを示しています。
前提条件
元のリクエストオブジェクト:
http://domain.example.com/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3説明リクエスト 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
ドメイン名 (CDN サイト用) (DomainName):
domain.example.com。タイムスタンプ (timestamp):
201508150800。プライベートキー (Privatekey):
aliyuncdnexp1234。ユーザーリクエストの相対パス (Path):
/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3。オリジンフェッチでアクセスするファイルのパス (Filename):
/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3。
連結フロー
ハッシュ化用の文字列を構築します:
// sstring="Privatekey+timestamp+Path" sstring=aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3md5hash 値を計算します:
// md5hash = md5sum(sstring) md5hash = md5sum("aliyuncdnexp1234201508150800/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3") = 9044548ef1527deadafa49a890a377f0署名付き URL を生成します:
// 署名付き URL=http://DomainName/{<timestamp>/<md5hash>}/FileName http://domain.example.com/201508150800/9044548ef1527deadafa49a890a377f0/4/44/44c0909bcfc20a01afaf256ca99a8b8b.mp3
クライアントが署名付き URL を使用してアクセスリクエストを送信すると、CDN サーバーは md5hash 値を計算します。計算された値がリクエスト内の md5hash 値 (この例では 9044548ef1527deadafa49a890a377f0) と一致し、かつ署名付き URL が期限切れでない場合、認証は成功します。それ以外の場合、認証は失敗します。