Apache RocketMQのメッセージキューは、各HTTPアクセス要求を検証します。 Message Queue for Apache RocketMQに送信される各HTTPリクエストには、リクエストヘッダーにAuthorizationパラメーターが含まれ、Authorizationパラメーターには署名が含まれます。 このトピックでは、署名を生成する方法について説明します。
背景情報
Apsara Stackは、AccessKey IDとAccessKeyシークレットで構成されるAccessKeyペアを各ユーザーに発行します。 ユーザーは、Apsara Uni-manager管理コンソールでAccessKeyペアを申請および管理できます。
Access Key ID はユーザーの ID の確認に使用されます。
AccessKey Secret は、署名文字列の暗号化と認証に使用されます。 AccessKey Secret は、機密情報として厳密に取り扱う必要があります。
詳細については、「AccessKey の作成」をご参照ください。
Message Queue for Apache RocketMQが提供するHTTPサービスは、AccessKeyペアを使用して対称暗号化を実行し、リクエスト送信者のIDを検証します。 計算された検証コードがリクエストで提供されたものと同じである場合、HTTPサービスはリクエストが有効であると判断します。 それ以外の場合、HTTPサービスは要求を拒否し、HTTP 403を返します。
リクエストの署名を提供するには、各HTTPリクエストのヘッダーにAuthorizationパラメーターを追加する必要があります。 このようにして、HTTPサービスは要求の有効性を判断できます。
リクエストに署名する方法
Authorizationパラメーターは、次の形式で指定します。
MQ <AccessKey ID >:< 署名>
次のコードは、署名の生成に使用されるパラメーターを示しています。
Signature = base64(hmac-sha1(HTTP_METHOD + "\n"
+ "\n"+ CONTENT-TYPE + "\n"
+ DATE + "\n"
+ "x-mq-version:" + MQVersion + "\n"
+ CanonicalizedResource)) HTTP_METHOD: PUT、GET、POST、DELETEなどのHTTPメソッドを大文字で指定します。
CONTENT-TYPE: リクエストボディのタイプを指定します。 値をtext/xml; charset=utf-8に設定します。
日付: 操作を実行する時刻を指定します。 このパラメーターは空のままにすることはできず、UTCで指定する必要があります。 たとえば、このパラメーターをThu, 07 Mar 2012 18:49:58 GMTに設定できます。
MQVersion: Apache RocketMQ APIのMessage Queueのバージョンを指定します。 値を2015-06-06に設定します。
CanonicalizedResource: HTTPリクエストでリクエストされたリソースのURI (Uniform Resource Identifier) を指定します。 たとえば、消費リクエストのURIを /topics/abc/messages?consumer=GID_abcに設定します。
string-to-signはUTF-8形式である必要があります。
RFC 2104で定義されているHMAC-SHA1方法を使用して署名を計算します。 この方法では、AccessKey secretが暗号化キーとして使用されます。