edit-icon download-icon

シグネチャー

最終更新日: May 24, 2019

Image Search は、送信されたすべての HTTP および HTTPS リクエストを検証します。したがって、Image Search に送信されるリクエストに対して、Access Key ID と Access Key Secret の対称暗号化アルゴリズムを使用して認証を行います。Access Key ID と Access Key Secret を申請し、Alibaba Cloud Web サイトで管理することができます。Access Key ID は、ユーザーを一意に識別します。Access Key Secret は、クライアント上で署名を暗号化し、サーバー上で復号化するために使用されます。セキュリティ上、Access Key Secret を他人がアクセスできないようにしてください。

署名の作成

署名には、共通リクエストヘッダー、CanonicalizedResource、ボディの 3 つの部分が含まれます。共通リクエストヘッダーには、HTTP ヘッダーパラメーターと Alibaba Cloud プロトコルヘッダーパラメーターとが含まれます。

  1. ボディの MD5 値を計算し、Base64 形式でエンコードし、エンコードされた文字列をヘッダーに追加します。
  2. ヘッダー文字列を正規化するには、ヘッダーパラメーターを使用します。
    1. headerStringToSign =
    2. HTTP-Verb + "\n" + //HTTP-Verb represents a request method: POST or GET
    3. Accept + \n + //The value of Accept must be application/json
    4. Content-MD5 + "\n" + //Content-MD5 represents the calculated MD5 value
    5. Content-Type + "\n" + //The value of Content-Type must be application/octet-stream;chrset=utf-8
    6. Date + "\n" + //Date represents the GMT
    7. "x-acs-signature-method:HMAC-SHA1\n" +
    8. "x-acs-signature-nonce:" + ${x-acs-signature-nonce} + "\n" +
    9. "x-acs-version:2018-01-20" + "\n";
  3. CanonicalizedResource とは、辞書順にソートされた複数のサブリソース項目を含むリソース文字列を指します。サブリソース項目はアンパサンド (&) で区切られます。各サブリソース項目には、サブリソースとクエリが含まれます。次の例では、疑問符 (?) に続くすべてのパラメーターがサブリソース文字列を構成します。
    1. resourceStringToSign =
    2. URI + "?instanceName=" + ${instanceName};
  4. ヘッダー文字列とサブリソース文字列を stringToSign に追加します。
    1. stringToSign = headerStringToSign + resourceStringToSign;
  5. RFC2104 で定義されている HMAC アルゴリズムを使用して StringToSign の HMAC 値を計算し、Base64 形式で HMAC 値をエンコードします。Authorization に追加される最終的な署名には、次のように、Access Key ID と Base64 でエンコードされた文字列を含める必要があります。
    1. Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) )
    2. Authorization = "acs " + AccessKeyId + ":" + Signature

    注意: AccessSecret は Access Key Secret を表します。署名を計算するために使用されるアルゴリズムは SHA1 です。

この例では、リクエストは次の通りです。

  1. curl -X POST
  2. -H "date:Sat 27 Jan 2018 17:53:28 GMT"
  3. -H "content-md5:MACiECZtnLiNkNS1v5ZCAA=1"
  4. -H "content-type:application/x-www-form-urlencoded;charset=utf-8"
  5. -H "x-acs-signature-method:HMAC-SHA1"
  6. -H "x-acs-signature-nonce:123212345678231234"
  7. -H "x-acs-version:2019-03-25"
  8. -H "accept:application/json"
  9. -d "..."
  10. "http://imagesearch.cn-shanghai.aliyuncs.com/v2/image/search"

計算された stringToSign は次の通りです。

  1. POST
  2. application/json
  3. MACiECZtnLiNkNS1v5ZCAA==
  4. application/x-www-form-urlencoded;charset=utf-8
  5. Sat 27 Jan 2018 19:54:26 GMT
  6. x-acs-signature-method:HMAC-SHA1
  7. x-acs-signature-nonce:123212345678231235
  8. x-acs-version:2019-03-25
  9. /v2/image/search

この例では、Access Key ID は testAccessKey であり、Access Key Secret は testKeySecret です。最終的な署名は次の通りです。

  1. acs testAccessKey:31nTIpResD/0C8gb+ChUeuvsxlw=

この署名をリクエストヘッダーの Authorization に追加します。