URL 署名は、オリジンサーバーのリソースへの不正アクセスを防止します。 Alibaba Cloud CDN と は、4 種類の URL 署名方式を提供しています。このトピックでは、Type F の仕組みと使用例について説明します。
Type F は最もシンプルな URL 署名方式です。プライベートキーを使用した MD5 ハッシュ化と、デフォルトのパラメーター名 sign および time を使用します。ほとんどの基本的な認証シナリオに適しています。
署名付き URL に中国語文字を含めることはできません。
URL 署名は、クエリパラメーター (?) を既に含む URL をサポートしていません。 これは、署名付き URL 自体がクエリパラメーターを追加するためです。
仕組み
署名付き URL の形式
署名付き URL は、以下の形式です。
http://DomainName/FileName?{sign=<md5hash>&time=<timestamp>}説明{}内のコンテンツは、標準 URL に追加される認証パラメーターを表します。signとtimeのパラメーター名はデフォルトです。 URL 署名の設定コンソールで、[署名パラメーター]と[タイムスタンプパラメーター]をカスタマイズできます。パラメーター
説明
DomainName
CDN または によって高速化されるドメイン名。
PrivateKey
大文字、小文字、数字で構成される 16~32 文字のカスタム暗号化キー。
FileName
オリジンリクエストで取得するリソースへのパス。 パスはスラッシュ (
/) で始まる必要があります。timestamp
署名サーバーが署名付き URL を生成した時刻。この値は、有効期間と組み合わせて、署名付き URL の有効期限を決定します。時刻は UNIX タイムスタンプ (1970年1月1日00:00:00 UTC からの経過秒数) であり、タイムゾーンに依存しません。URL 署名の設定コンソールで、タイムスタンプ形式を 10 進数 (UNIX タイムスタンプ) または 16 進数 (UNIX タイムスタンプ) に設定できます。
説明URL 署名の設定 コンソールで TTL を設定します。設定が完了すると、署名付き URL の有効期限は
timestamp+ CDN に設定された有効期間となります。md5hash
MD5 アルゴリズムによって生成される 32 文字の文字列。数字 0~9 と小文字 a~f を含みます。
md5hash値は、次の署名文字列から生成されます。sstring = "Privatekey+URI+timestamp" (各項目は `+` 記号なしで直接連結されます。URI はリクエスト対象オブジェクトの相対パス (例:/Filename) で、クエリパラメーターは含みません) md5hash = md5sum(sstring)認証ロジック
CDN または のエッジノードがリソースのリクエストを受信すると、まず
timestamp+有効期間が経過しているかどうかを確認します。timestamp+有効期間が現在時刻より前の場合、リクエストは期限切れです。サーバーは HTTP 403 エラーを返します。timestamp+有効期間が現在時刻より後の場合、サーバーはsstring形式で署名文字列を構築し、その MD5 値を計算し、結果をリクエスト内のmd5hash値と比較します。値が一致する場合、認証に成功し、エッジノードはリクエストされたリソースを返します。
説明認証に成功すると、エッジノードは URL から認証パラメーターを削除します。 これにより、キャッシュヒット率が向上し、オリジンへのトラフィックが削減されます。 例:
署名パラメーター付き URL:
http://DomainName/FileName?{sign=<md5hash>&time=<timestamp>}認証後:
キャッシュキー生成用の URL:
http://DomainName/FileNameオリジンリクエストの URL:
http://DomainName/FileName
値が一致しない場合、認証に失敗し、サーバーは HTTP 403 エラーを返します。
使用例
以下の例では、Type F URL 署名の実装方法を示します。
前提条件
取得するオブジェクト:
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:
aliyuncdnexp1234timestamp:
55CE8100
プロセス
Privatekey+URI+timestampの形式で署名文字列sstringを作成します。aliyuncdnexp1234/test.flv55CE8100署名文字列の MD5 ハッシュを計算します。
md5hash = md5sum(aliyuncdnexp1234/test.flv55CE8100) = a37fa50a5fb8f71214b1e7c95ec7a1bd署名結果とタイムスタンプをクエリパラメーターとして追加し、署名付き URL を作成します。
http://domain.example.com/test.flv?sign=a37fa50a5fb8f71214b1e7c95ec7a1bd&time=55CE8100
クライアントが署名付き URL を使用してリソースにアクセスすると、CDN サーバーで計算された md5hash 値が、リクエスト内の md5hash 値 (例: a37fa50a5fb8f71214b1e7c95ec7a1bd) と一致し、かつ署名付き URL の有効期限が切れていない場合に、認証が成功します。それ以外の場合、認証は失敗します。