Image Search では、リクエストの送信者 ID が認証されます。 したがって、リクエストが HTTP と HTTPS のどちらで送信されるかに関係なく、各リクエストに署名情報が含まれている必要があります。 Image Search は、AccessKey ペアを使用した対称暗号化を実装して、リクエストの送信元を検証します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。

AccessKey ペアはパスワードと同等であり、API 操作を呼び出すときに必要になります。 AccessKey ID はユーザーの ID を検証するために使用され、AccessKey Secret は署名文字列を暗号化して検証するために使用されます。 AccessKey Secret は、機密情報として厳密に取り扱う必要があります。 詳細については、「AccessKey ペアの作成」をご参照ください。

リクエストへの署名

署名には、共通リクエストヘッダー、正規化されたリソース、本文が含まれます。 共通リクエストヘッダーには、HTTP ヘッダーパラメーターと Alibaba Cloud プロトコルヘッダーパラメーターが含まれます。 次の手順は、リクエストに署名する方法を示しています。
  1. 本文の MD5 ハッシュ値を計算し、Base64 で文字列をエンコードし、ヘッダーにエンコードされた文字列を追加します。
  2. ヘッダー文字列を正規化するには、リクエストのヘッダーパラメーターを使用します。
    headerStringToSign = 
        HTTP-Verb + "\n" +         // HTTP-Verb represents a request method that is POST or GET.
        Accept + "\n" +            // The value of Accept is application/json.
        Content-MD5 + "\n" +       // Content-MD5 represents the MD5 hash value that is calculated in Step 1.
        Content-Type + "\n" +      // The value of Content-Type is application/octet-stream;chrset=utf-8.
        Date + "\n" +              // The value of Date is the Greenwich Mean Time (GMT).
        "x-acs-signature-method:HMAC-SHA1\n" + 
        "x-acs-signature-nonce:" + ${x-acs-signature-nonce} + "\n" +
        "x-acs-version:2018-01-20" + "\n";
  3. CanonicalizedResource はアクセスするリソースの正規説明を示します。 サブリソースとクエリパラメーターを辞書式順序で並べ替え、アンパサンド (&) で区切ってサブリソース文字列を生成します。 サブリソース文字列は、疑問符 (?) とその後に続くすべてのパラメーターから構成されます。 次の例を示します。
    resourceStringToSign = 
        URI + "? instanceName=" + ${instanceName};
  4. Construct a string-to-sign in the following format based on the preceding canonicalized query string:
    stringToSign = headerStringToSign + resourceStringToSign;
  5. RFC 2104 に沿って署名を計算します。
    Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) )
    Authorization = "acs " + AccessKeyId + ":" + Signature
    署名計算に使用するキーが AccessKey Secret になります。 このプロセスで使用されるハッシュアルゴリズムは SHA1 です。

この例では、次のリクエストを使用します。
curl -X POST 
     -H "date:Sat 27 Jan 2018 17:53:28 GMT" 
     -H "content-md5:MACiECZtnLiNkNS1v5ZCAA=1" 
     -H "content-type:application/x-www-form-urlencoded;charset=utf-8" 
     -H "x-acs-signature-method:HMAC-SHA1" 
     -H "x-acs-signature-nonce:123212345678231234" 
     -H "x-acs-version:2019-03-25"
     -H "accept:application/json" 
     -d "..." 
     "http://imagesearch.cn-shanghai.aliyuncs.com/v2/image/search"
stringToSign パラメーターの次の値が返されます。
POST
application/json
MACiECZtnLiNkNS1v5ZCAA==
application/x-www-form-urlencoded;charset=utf-8
Sat 27 Jan 2018 19:54:26 GMT
x-acs-signature-method:HMAC-SHA1
x-acs-signature-nonce:123212345678231235
x-acs-version:2019-03-25
/v2/image/search
この例では、Access Key ID は testAccessKey、Access Key Secret は testKeySecret です。 次の署名値が返されます。
acs testAccessKey:31nTIpResD/0C8gb+ChUeuvsxlw=

署名値は、リクエストヘッダーの Authorization パラメーターに割り当てられます。