セキュリティを確保するために、すべてのHTTPまたはHTTPS APIリクエストに署名する必要があります。 Alibaba Cloudは、リクエスト署名を使用して、リクエスト送信者のIDを検証します。 Alibaba Cloudドメインは、AccessKeyペアによる対称暗号化を実装して、リクエスト送信者のIDを検証します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。

ステップ1: 正規化されたクエリ文字列を作成する

  1. リクエストパラメーター (共通リクエストパラメーターおよびSignatureを除く操作固有のパラメーターを含む) をアルファベット順に並べます。
    たとえば、GET メソッドを使用してリクエストする場合、これらのパラメーターは URL の末尾に疑問符 ? を付け、アンパサンド & で連結します。
  2. エンコードされたパラメーターとパラメーター値を等号 (=) で連結します。
  3. Use an ampersand (&) to connect the encoded request parameters. これらのパラメーターは、手順1と同じ順序でソートする必要があります。

次に、リクエスト構造に続く正規化されたクエリ文字列 (CanonicalizedQueryString) を取得します。 詳細については、「リクエスト構造」をご参照ください。

Step 2: Create文字列に署名符号化からcanonicalizedクエリ文字列

  1. 正規化された文字列を使用して、変数 StringToSign を作成します。 前述のpercentEncodeを使用して、前の手順で作成された標準化リクエスト文字列を次のルールで処理できます。
    StringToSign=
      HTTPMethod + "&" + //HTTPMethod: HTTP method used for making request, for example GET.
      percentEncode("/") + "&" + //percentEncode("/"): Encode backslash (/) to %2F.
      percentEncode(CanonicalizedQueryString) //Encode the canonicalized query string created in the Step 1.
  2. StringToSign の HMAC-SHA1 値 (RFC2104 の規則に準拠) を計算して、変数 Signature を作成します。 ここでは、Java のエンコーディングメソッド Base64 を使用します。
    Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) )
    RFC2104 に準拠する署名を計算する場合、AccessKeySecret の後ろにアンパサンド (&) が続きます。アンパサンドの16 進 ASCII 値は 38 です。
  3. RFC3986 の規則に従って Signature の値を、正規化されたクエリ文字列 URL にエンコードします。

例1: パラメータの連結

例として、DescribeRegions を呼び出します。 既にコンソールで AccessKeyID = testid と AccessKeySecret = testsecret は作成されています。

  1. StringToSignを作成します。
    GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeRegions%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf%26SignatureVersion%3D1.0%26Timestamp%3D2016-02-23T12%253A46%253A24Z%26Version%3D2014-05-26
  2. HMAC-SHA1 値を計算します。 既に AccessKeySecret = testsecret が作成されているので、RFC2104 の規則で使用するキーは testsecret& で、HMAC-SHA1 値は OLeaidS1JvxuMvnyHOwuJ+uX5qY= です。 ここでは、Java のエンコーディングメソッド Base64 を使用します。
    Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) )
  3. RFC 3986を使用してエンコードされたSignature=OLeaidS1JvxuMvnyHOwuJ % 2BuX5qY % 3D文字列を、手順1のURLに追加します。
    http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z