すべてのプロダクト
Search
ドキュメントセンター

:リクエストの署名

最終更新日:Jun 13, 2024

ApsaraDB for MongoDB は、アクセスリクエストごとに ID 認証を実施します。 したがって、すべてのHTTPおよびHTTPSリクエストに署名情報が含まれている必要があります。 ApsaraDB for MongoDBは、Access Key IDとAccess Key secretを使用して対称暗号化を実装し、リクエスト送信者を認証します。

AccessKeyペアはAlibaba Cloudによって発行されます。 Alibaba Cloud Internationalサイト (alibabacloud.com) にアクセスして、AccessKeyペアを申請および管理できます。 AccessKey IDはユーザーのIDの検証に使用され、AccessKey secretは署名文字列の暗号化と検証に使用されます。 AccessKey Secret は、機密情報として厳密に取り扱う必要があります。 リクエストに署名するには、次の手順を実行します。

  1. リクエストパラメーターを配置して、標準化されたクエリの文字列を作成します。
    1. Signatureを除くすべての共通リクエストパラメーターと操作固有パラメーターを含むリクエストパラメーターをアルファベット順に配置します。
      説明 GETメソッドを使用してリクエストを送信すると、リクエストパラメータが URI の一部として送信されます。 URIのリクエストパラメーターは、疑問符 (?) とアンパサンド (&) の間にあります。
    2. 各リクエストパラメータの名前と値をエンコードします。 URLは、UTF-8の文字セットに基づいてパラメーター名と値をエンコードします。 URLエンコードルールは次のとおりです。
      1. 大文字、小文字、数字、およびハイフン (-) 、アンダースコア (_) 、ピリオド (.) 、チルダ (~) などの特殊文字をエンコードする必要はありません。
      2. その他の文字は % XY形式でパーセントエンコードする必要があります。 XYは文字のASCIIコードを16進表記で表します。 たとえば、二重引用符 (“) は、%22 とエンコードされます。
      3. 拡張UTF-8文字は % XY % ZA… 形式でエンコードされます。 スペースは % 20としてエンコードする必要があります。 スペースは、プラス記号 (+) としてエンコードしないでください。
        説明 一般に、s java.net.URLEncoderなどのURLエンコーディングをサポートするすべてのライブラリは、application/x-www-form-urlencoded MIMEタイプのルールに基づいてエンコーディングを実行します。 このエンコード方法を使用する場合は、エンコードされた文字列のプラス記号 (+) を % 20に、アスタリスク (*) を % 2Aに、% 7Eをチルダ (~) に置き換えて、エンコード規則に準拠します。
    3. 各パラメーターのエンコードされた名前と値を等号 (=) で接続します。
    4. 各パラメーターの名前の最初の文字に基づいて、エンコードされたパラメーターをアルファベット順に配置し、パラメーターをアンパサンド (&) で接続して、正規化されたクエリ文字列を作成します。
  2. 次のルール
    に基づいて、エンコードされた正規化クエリ文字列から文字列記号を作成します。HTTPMethod + "&" +
    percentEncode("/") + "&" +
    percentEncode(CanonicalizedQueryString) 

    注:

    • HTTPMethod: GETなど、リクエストの送信に使用されるHTTPメソッドを指定します。
    • percentEncode("/"): ステップ1.ii. で説明したURLエンコーディングルールに基づいてスラッシュ (/) をエンコードします。 スラッシュ (/) のエンコード値は % 2Fです。
    • percentEncode(CanonicalizedQueryString): ステップ1で作成された正規化されたクエリ文字列を、ステップ1.ii.
  3. RFC 2104に記載されているHMACアルゴリズムに基づいて、署名する文字列のハッシュベースのメッセージ認証コード (HMAC) 値を計算します。
    説明 署名の計算に使用されるキーは、アンパサンド (&) (ASCII:38) が付加された AccessKey secret です。 計算には SHA1 が使用されます。
  4. Base64エンコードルールに従って、HMAC値を文字列にエンコードします。 その後、署名値を取得できます。
  5. この署名値をsignatureパラメーターの値としてリクエストパラメーターに追加します。 これで、リクエストの署名プロセスが完了しました。
    説明 署名文字列が最終的なリクエストパラメーター値としてRDSサーバーに送信される場合、RFC 3986で定義されているルールに基づいて、他のパラメーターと同様に文字列をURLエンコードする必要があります。
    この例では、DescribeDBInstances操作が呼び出されます。 次のコードは、Signatureパラメーターを含まないリクエストURLです。
    http://mongodb.aliyuncs.com/?Timestamp=2016-01-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2015-12-01&SignatureVersion=0。
    次の文字列は、文字列に署名します。
    GET&% 2F&AccessKeyId % 3DDescribeInstances&Format % 3DXML&RegionId % 3Dregion1&SignatureMethod % 3DHMAC-SHA1&SignatureNonce % 3DNwDAxLU6tFE033% 325252516-A2001 16-A1Z&Signature%
    AccessKey IDがtestid、AccessKey secretがtestsecret、HMAC計算に使用されるキーがtestsecret&であるとします。 次の署名文字列が取得されます。
    BIPOMlu8LXBeZtLQkJTw6iFvw1E=
    次のURLは、Signatureパラメーターが追加された後の署名されたリクエストURLです。
    http://mongodb.aliyuncs.com/?Timestamp=2016-01-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2015-12-01&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D