Access Key ID と Access Key Secret は、Alibaba Cloud からユーザーに対して公式に発行されます。ユーザーは Alibaba Cloud の公式 Web サイトで申請、管理することができます。
Access Key ID はユーザーの身分を識別します。
Access Key Secret はユーザーの署名文字列の暗号化に使用する秘密鍵であり、サーバーで署名文字列を検証する際にも用いられます。機密として厳密に取り扱い、Alibaba Cloud と当該ユーザー以外に知られてはならない情報です。
MNS はすべてのリクエストを認証します。そのため、MNS に送信するリクエストすべてに署名情報を含める必要があります。MNS は、Access Key ID と Access Key Secret を使用して、対称暗号化方式によるリクエスト送信者の認証を実行します。計算結果が提供された結果と同じであった場合、リクエストは有効と見なされます。それ以外の場合、MNS はリクエストを拒否し、HTTP 403 エラーコードを返します。
HTTP リクエストに権限付与ヘッダーを追加して、署名情報を含めることができます。これにより、そのメッセージが権限付与済みであることが示されます。また MNS では、署名が HTTP ヘッダーに含まれている必要があります。具体的には、次のとおりです。Authorization: MNS スペース Access Key ID: 署名
署名の計算方法は次のとおりです。
Signature = base64(hmac-sha1(VERB + "\n"
+ CONTENT-MD5 + "\n"
+ CONTENT-TYPE + "\n"
+ DATE + "\n"
+ CanonicalizedMNSHeaders
+ CanonicalizedResource))
- VERB は HTTP メソッドを示します (PUT など)。
- Content-Md5 は、リクエストコンテンツの MD5 の値を示します (「その他の問題」の 3 を参照してください)。
- CONTENT-TYPE は、リクエストのコンテンツタイプを示します (「その他の問題」の 3 を参照してください)。
- DATE は操作日時を示します。空白のままにはできません (GMT 形式のみサポートされています)。リクエストの時刻と MNS サーバー時刻との差が 15 分を超えている場合、MNS はリクエストを無効と見なし、HTTP エラーコード 400 を返します。関連するエラー情報とエラーコードについては、このドキュメントのパート 5 を参照してください。(例: ‘Thu, 17 Mar 2012 18:49:58 GMT’)
- CanonicalizedMNSHeaders は HTTP リクエスト内の “x-mns-“ で始まるフィールドの組み合わせを示します (詳細については「注意」を参照してください)。
- CanonicalizedResource は HTTP でリクエストするリソースの URI (uniform resource identifier) を示します。(例: ‘/queues/$queueName?metaOverride=true’)
注意:
CanonicalizedMNSHeaders (“x-mns-“ で始まるヘッダー) は、認証前に次のルールに準拠している必要があります。
- ヘッダー名が小文字であること。
- ヘッダーが昇順で並べ替えられていること。
- ヘッダーの名前と値を区切るコロンの前後にスペースがないこと。
- 各ヘッダーの後に “\n” がある。”x-mns-“ で始まるヘッダーがない場合、CanonicalizedMNSHeaders は署名内で null に設定されます。
その他の問題:
- 署名に使用する文字列は UTF-8 形式です。
- 署名方法には、RFC 2104 で定義されている HMAC-SHA1 方式が採用されています。Key は AccessKeySecret を示します。
- リクエストの content-type と content-md5 は省略可能です。署名が必要な場合は null 値を “\n” に置き換えます。
リクエストの例は次のとおりです。
PUT /queues/$queueName?metaOverride=true HTTP/1.1
Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
Date: Wed, 08 Mar 2012 12:00:00 GMT
Authorization: MNS 15B4D3461F177624206A:xQE0diMbLRepdf3YB+FIEXAMPLE=
<?xml version="1.0" encoding="UTF-8" ?>
<Queue xmlns="http://mns.aliyuncs.com/doc/v1/">
<VisibilityTimeout >60</VisibilityTimeout>
<MaximumMessageSize>1024</MaximumMessageSize>
<MessageRetentionPeriod>120</MessageRetentionPeriod>
<DelaySeconds>30</DelaySeconds>
</Queue>
入力した AccessKey ID が存在しない場合や、アクセスキーがアクティブでない場合は、HTTP エラーコード 403 (Forbidden) が返されます。
応答の例:
Content-Type: text/xml
Content-Length: 314
Date: Wed, 18Mar 2012 08:04:06 GMT
x-mns-request-id: 512B2A634403E52B1956133E
<?xml version="1.0" encoding="utf-8"?>
<Error xmlns="http://mns.aliyuncs.com/doc/v1/">
<Code>AccessIDAuthError</Code>
<Message>
AccessID authentication fail, please check your AccessID and retry.
</Message>
<RequestId>512B2A634403E52B1956133E</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>
Date がヘッダーに含まれていない場合や、形式が正しくない場合は、HTTP エラーコード 403 (Forbidden) が返されます。
応答の例:
Content-Type: text/xml
Content-Length: 274
Date: Wed, 18Mar 2012 08:04:06 GMT
x-mns-request-id: 512B2A634403E52B1956133E
<?xml version="1.0" encoding="UTF-8" ?>
<Error xmlns="http://mns.aliyuncs.com/doc/v1/">
<Code>InvalidArgument</Code>
<Message>Date header is invalid or missing.</Message>
<RequestId>7E1A5CF258F535884403E533</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>
リクエスト時刻は MNS サーバーの現在時刻から 15 分以内である必要があります。それ以外の場合、HTTP エラーコード 408 (Timeout) が返されます。
戻り値の例:
Content-Type: text/xml
Content-Length: 283
Date: Wed, 11 May 2011 09:01:51 GMT
x-mns-request-id: 512B2A634403E52B1956133E
<?xml version="1.0" encoding="UTF-8" ?>
<Error xmlns="http://mns.aliyuncs.com/doc/v1/">
<Code> TimeExpired</Code>
<Message>
The http request you sent is expired.
</Message>
<RequestId>512B2A634403E52B1956133E</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>