HTTP APIリクエストを Simple Message Queue(旧称 MNS) サーバーに送信するたびに、HTTP Authorizationヘッダーに署名を含める必要があります。ヘッダーに含まれる署名がサーバーによって計算された署名と異なる場合、サーバーはリクエストを拒否し、403 SignatureDoesNotMatchエラーメッセージを返します。このトピックでは、この問題のトラブルシューティング方法について説明します。
問題
SMQ API操作を実行すると、「403 SignatureDoesNotMatch」エラーメッセージが表示されます。
原因
HTTP APIリクエストを SMQ サーバーに送信するたびに、HTTP Authorizationヘッダーに署名を含める必要があります。ヘッダーに含まれる署名がサーバーによって計算された署名と異なる場合、サーバーはリクエストを拒否し、403 SignatureDoesNotMatchエラーメッセージを返します。
解決策
この問題のトラブルシューティングを行うには、次の手順を実行します。
指定したリクエスト URL が有効かどうかを確認します。詳細については、「APIリクエスト構造」をご参照ください。
指定したAccessKey IDとAccessKeyシークレットが有効かどうかを確認します。Alibaba Cloudアカウントを使用して、Alibaba Cloud管理コンソール で AccessKey ID と AccessKey シークレットを申請および管理できます。
リクエストの署名を使用して、生成された署名を確認します。
リクエストパラメーターがリクエストの仕様に準拠しているかどうかを確認します。以下に一般的なエラーを示します。リクエストの仕様の詳細については、「リクエストの署名」をご参照ください。
APIバージョンが無効です。最新の API バージョンの詳細については、「リクエスト構造」をご参照ください。
日付の形式が無効です。
x-mns-
で始まるヘッダーが仕様に準拠していません。
参考資料
署名の計算方法の例を次に示します。
HTTPヘッダーの例:
GET /MyQueue HTTP/1.1 Host: 1xxxx0.mns.cn-hangzhou.aliyuncs.com Date: Thu, 09 Jul 2015 03:01:34 GMT x-mns-version:2015-06-06
署名対象文字列の例:
GET (Line feed) (Line feed) Thu, 09 Jul 2015 03:01:34 GMT x-mns-version:2015-06-06 /MyQueue
AccessKey ID が
TestAccessID
パラメーターの値であり、AccessKey シークレットがTestAccessSecret
パラメーターの値である場合、システムはこれらの値と署名対象文字列の組み合わせに基づいて暗号化アルゴリズムを使用して署名を計算します。