認証機能を使用すると、不正なダウンロードやアクセスからWebサイト資産を保護できます。 このトピックでは、Edge Security Acceleration (ESA) のサーバー認証機能の動作について説明し、説明を容易にするための例を示します。
仕組み
署名付きURLの構成
http://server_address[:port]/[uri]?auth_key=timestamp-rand-md5hash署名付きURLのフィールド
項目
説明
server_address
リソースが配置されているサーバーのアドレス。
port
サーバーポート。
ウリ
サーバー上の特定のリソースの相対パス。
auth_key
指定した認証キー。
timestamp
署名付きURLの有効期限が切れるタイムスタンプ。 この値は、署名付きURLが生成されたときに指定された有効期限 (TTL) をUNIXタイムスタンプに加算することによって計算されます。 生成タイムスタンプは、1月1日1970 00:00:00 UTCから経過した秒数を示す10桁の整数です。
説明rand
ランダムな文字列。 文字列にハイフン (-) を含めることはできません。 例: 477b3bbc253f467b8def6711128c7bec。 ユニバーサル一意識別子 (UUID) の使用を推奨します。
md5hash
MD5アルゴリズムを使用して計算される文字列。 文字列の長さは32文字で、数字と小文字を使用できます。
計算方法:
string_to_sign = "URI-Timestamp-rand-PrivateKey" (URI indicates the relative path of the specific resource and does not contain query string parameters. Example: /accesslog/post) md5hash = md5sum(string_to_sign)認証ロジック
ポイントオブプレゼンス (POP) がリクエストを受信すると、POPは
timestampの値が現在の時刻よりも早いかどうかをチェックします。timestampが現在の時刻より前の場合、POPは要求されたURLが期限切れであるとみなし、HTTPステータスコード403を返します。timestampが現在の時刻より後の場合、前の表で説明したstring_to_signを使用して文字列が生成されます。 次に、MD5アルゴリズムを使用してmd5hash値が生成されます。 生成されたmd5hash値は、リクエスト内のmd5hash値と比較されます。2つの値が同じ場合、要求は認証を通過します。 POPは、要求されたリソースを返す。
それらが異なる場合、要求は認証に失敗する。 POPはHTTPステータスコード403を返します。
例
リソースURLは http://abc.aliyun.com:8080/accesslog/post 、PrivateKeyはaliyuncdn1234、ExpiredTimeで指定されたTTLは300秒です。
現在の時刻が2017 12月1日のUTC + 8:00の00:00:00であるとします。これは1512057600 UNIX形式で表されます。 署名付きURLに含まれるタイムスタンプは、次の式を使用して計算されます。
timestamp= 1512057600 + 300 = 1512057900
署名する文字列:
string_to_sign = "/accesslog/post-1512057900-0-aliyuncdn1234"この文字列に基づいてmd5hash値を計算します。
md5hash = md5sum("/accesslog/post-1512057900-0-aliyuncdn1234") = 0b3cc22622bdbb82d5ba632a5a5c89ca署名されたURL:
http://abc.aliyun.com:8080/accesslog/post?auth_key=1512057900-0-0b3cc22622bdbb82d5ba632a5a5c89ca
クライアントが署名付きURLを使用してリソースを要求する場合、ESA POPは計算されたmd5hash値を要求内のmd5hash値と比較します。 値が同じ (この例では0b3cc22622bdbb82d5ba632a5a5c8 9ca) で、署名付きURLが有効期間内の場合、リクエストは期待どおりに処理されます。 値が異なる場合、リクエストは認証に失敗します。