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
プロトコルヘッダーパラメーターが含まれます。 次の手順は、リクエストに署名する方法を示しています。
- 本文の MD5 ハッシュ値を計算し、Base64 で文字列をエンコードし、ヘッダーにエンコードされた文字列を追加します。
- ヘッダー文字列を正規化するには、リクエストのヘッダーパラメーターを使用します。
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";
- CanonicalizedResource はアクセスするリソースの正規説明を示します。 サブリソースとクエリパラメーターを辞書式順序で並べ替え、アンパサンド (&)
で区切ってサブリソース文字列を生成します。 サブリソース文字列は、疑問符 (?) とその後に続くすべてのパラメーターから構成されます。 次の例を示します。
resourceStringToSign = URI + "? instanceName=" + ${instanceName};
- Construct a string-to-sign in the following format based on the preceding canonicalized
query string:
stringToSign = headerStringToSign + resourceStringToSign;
- 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 パラメーターに割り当てられます。