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 は、機密情報として厳密に取り扱う必要があります。 リクエストに署名するには、次の手順を実行します。
- リクエストパラメーターを配置して、標準化されたクエリの文字列を作成します。
- Signatureを除くすべての共通リクエストパラメーターと操作固有パラメーターを含むリクエストパラメーターをアルファベット順に配置します。 説明 GETメソッドを使用してリクエストを送信すると、リクエストパラメータが URI の一部として送信されます。 URIのリクエストパラメーターは、疑問符 (?) とアンパサンド (&) の間にあります。
- 各リクエストパラメータの名前と値をエンコードします。 URLは、UTF-8の文字セットに基づいてパラメーター名と値をエンコードします。 URLエンコードルールは次のとおりです。
- 大文字、小文字、数字、およびハイフン (-) 、アンダースコア (_) 、ピリオド (.) 、チルダ (~) などの特殊文字をエンコードする必要はありません。
- その他の文字は % XY形式でパーセントエンコードする必要があります。 XYは文字のASCIIコードを16進表記で表します。 たとえば、二重引用符 (“) は、%22 とエンコードされます。
- 拡張UTF-8文字は % XY % ZA… 形式でエンコードされます。 スペースは % 20としてエンコードする必要があります。 スペースは、プラス記号 (+) としてエンコードしないでください。 説明 一般に、s java.net.URLEncoderなどのURLエンコーディングをサポートするすべてのライブラリは、application/x-www-form-urlencoded MIMEタイプのルールに基づいてエンコーディングを実行します。 このエンコード方法を使用する場合は、エンコードされた文字列のプラス記号 (+) を % 20に、アスタリスク (*) を % 2Aに、% 7Eをチルダ (~) に置き換えて、エンコード規則に準拠します。
- 各パラメーターのエンコードされた名前と値を等号 (=) で接続します。
- 各パラメーターの名前の最初の文字に基づいて、エンコードされたパラメーターをアルファベット順に配置し、パラメーターをアンパサンド (&) で接続して、正規化されたクエリ文字列を作成します。
- Signatureを除くすべての共通リクエストパラメーターと操作固有パラメーターを含むリクエストパラメーターをアルファベット順に配置します。
- 次のルール
に基づいて、エンコードされた正規化クエリ文字列から文字列記号を作成します。HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)注:
- HTTPMethod: GETなど、リクエストの送信に使用されるHTTPメソッドを指定します。
- percentEncode("/"): ステップ1.ii. で説明したURLエンコーディングルールに基づいてスラッシュ (/) をエンコードします。 スラッシュ (/) のエンコード値は % 2Fです。
- percentEncode(CanonicalizedQueryString): ステップ1で作成された正規化されたクエリ文字列を、ステップ1.ii.
- RFC 2104に記載されているHMACアルゴリズムに基づいて、署名する文字列のハッシュベースのメッセージ認証コード (HMAC) 値を計算します。 説明 署名の計算に使用されるキーは、アンパサンド (&) (ASCII:38) が付加された AccessKey secret です。 計算には SHA1 が使用されます。
- Base64エンコードルールに従って、HMAC値を文字列にエンコードします。 その後、署名値を取得できます。
- この署名値を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