edit-icon download-icon

Signature mechanism

最終更新日: Dec 13, 2018

MPS は、各アクセスリクエストに対して ID 認証を実行します。したがって、HTTP リクエストと HTTPS リクエストの両方に署名情報が含まれている必要があります。MPS では、アクセスキー ID およびアクセスキーシークレットのペアで対称暗号化を使用して、リクエスト送信元の身元を認証します。アクセスキー ID およびアクセスキーシークレットは Alibaba Cloud によって公式に発行されます(来訪者は Alibaba Cloud の公式サイトで申請して管理することができます)。アクセスキー ID は来訪者の身元を示します。アクセスキーシークレットは、サーバー上の署名文字列を暗号化して認証するために使用される秘密鍵です。機密情報として扱い、Alibaba Cloud とユーザーだけが使用できるようにしておく必要があります。

アクセスリクエストに署名するには、次の手順を実行します。

  1. リクエストパラメーターを使用して正規化クエリ文字列を構築します。

    1. リクエストパラメーターは、パラメーター名のアルファベット順で並べています(本ドキュメントに記載している API の「パブリック リクエスト パラメーター」(Signature パラメーター以外)およびカスタム パラメーターを含みます)。

      注意: GET メソッドで送信されたリクエストの場合、リクエストのパラメーターでリクエスト URI のパラメーター部分を構成します(つまり、URL で ? に続く部分、および、& で接続される部分)。

    2. 各リクエストパラメーターの名前と値をエンコードします。UTF-8 文字セットを使用して URL をエンコードする必要があります。 URL エンコード規則は次のとおりです。

      • 文字 (A–Z、a–z)、数字 (0–9)、ハイフン (-)、アンダースコア (_)、ピリオド (.)、チルダ (~) はエンコードされません。

      • 他の文字は %XY にエンコードされます。XY は文字の ASCII コードを 16 進表記で表します。たとえば、二重引用符 (“) は %22 としてエンコードされます。

      • 拡張 UTF-8 文字は %XY%ZA… にエンコードされます。

      • 英語のスペース ( ) はプラス記号 (+) ではなく、%20 にエンコードされることにご注意ください。

      注意: 一般的に、URL エンコードをサポートするライブラリ(たとえば、Java の java.net.URLEncoder)はすべて、application/x-www-form-urlencodedMIME-type の規則に従ってエンコードされます。このエンコード方式に従い、コード化された文字列でプラス記号 (+) を %20 に、アスタリスク(*)を %2A に置き換えて、%7E をチルダ (~) に変更することで、上記のエンコード規則に従うことができます。

    3. エンコードされたパラメーター名および値を等号 (=) で接続します。

    4. 次に、アルファベット順に等号で結ばれたパラメーター名とバリューのペアをソートし、それらを & で接続して正規化クエリ文字列を生成します。

  2. 前の手順で取得した正規化クエリ文字列を使用して、次の規則に従って署名計算用の文字列を作成します。

    1. StringToSign=
    2. HTTPMethod + "&" +
    3. percentEncode("/") + "&" +
    4. percentEncode(CanonicalizedQueryString)

    ここでは、HTTPMethod はリクエスト送信に使用されます(たとえば、GET)。

    percentEncode(“/“) は、1.b で説明した URL エンコード規則、すなわち、%2F に従った文字/のコード値です。

    percentEncode(CanonicalizedQueryString) は、1.b で説明した URL エンコード規則に従ってエンコードされた正規化クエリ文字列(手順1で作成)です。

  3. RFC2104 の定義によれば、上記の署名文字列を使用して署名の HMAC 値を計算します。

    注意: 署名を計算する際に、キーは Access Key Secret に&文字(ASCII コード 38)を付加したものです。SHA1 ハッシュアルゴリズムが使用されます。

  4. Base64 エンコードの規則に従って、上記の HMAC 値を文字列にエンコードして署名値を取得します。

  5. 取得した署名値を Signature パラメーターとしてリクエストパラメーターに加え、リクエスト署名のプロセスを完了します。

    注意: 取得された署名値は、MPS サーバーに最終的なリクエスト パラメーター値として送信される前に、他のパラメーターと合わせて RFC 3986 基づいて URL がエンコードされている必要があります。

SearchTemplate を例に、署名前のリクエスト URL は次のようになります。

  1. http://mts.cn-hangzhou.aliyuncs.com/?Timestamp=2015-05-14T09%3A03%3A45Z&Format=XML&AccessKeyId=testId&Action=SearchTemplate&PageSize=2&SignatureMethod=HMAC-SHA1&SignatureNonce=4902260a-516a-4b6a-a455-45b653cf6150&SignatureVersion=1.0&Version=2014-06-18

したがって、正規化クエリ文字列は次のとおりです。

  1. AccessKeyId=testId&Action=SearchTemplate&Format=XML&PageSize=2&SignatureMethod=HMAC-SHA1&SignatureNonce=4902260a-516a-4b6a-a455-45b653cf6150&SignatureVersion=1.0&Timestamp=2015-05-14T09%3A03%3A45Z&Version=2014-06-18

StringToSign は次のとおりです。

  1. GET&%2F&AccessKeyId%3DtestId&Action%3DSearchTemplate&Format%3DXML&PageSize%3D2&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D4902260a-516a-4b6a-a455-45b653cf6150&SignatureVersion%3D1.0&Timestamp%3D2015-05-14T09%253A03%253A45Z&Version%3D2014-06-18

Access Key ID のパラメーター値がtestId、Access Key Secret のパラメーター値がtestKeySecretであった場合、HMAC 計算に使用されるキーはtestKeySecret&であり、計算された署名値は次のとおりとなります。

  1. kmDv4mWo806GWPjQMy2z4VhBBDQ%3D

署名されたリクエスト URL (署名パラメーターの追加された)は次のとおりです。

  1. http://mts.cn-hangzhou.aliyuncs.com/?Signature=kmDv4mWo806GWPjQMy2z4VhBBDQ%3D&SignatureVersion=1.0&Action=SearchTemplate&Format=XML&SignatureNonce=4902260a-516a-4b6a-a455-45b653cf6150&PageSize=2&Version=2014-06-18&AccessKeyId=testId&SignatureMethod=HMAC-SHA1&Timestamp=2015-05-14T09%3A03%3A45Z

詳細なコードについては、呼び出し例 をご参照ください。