PolarDBは、各アクセス要求を認証します。 したがって、リクエストには、HTTPまたはHTTPSで送信されるかどうかに関係なく、署名情報が含まれている必要があります。 PolarDBは、AccessKey IDとAccessKeyシークレットで構成されるAccessKeyペアを使用して対称暗号化を実装し、リクエスト送信者のIDを検証します。 AccessKey ID とAccessKey Secret は、Alibaba Cloud によってユーザーに公式に発行されます。 Alibaba Cloud公式WebサイトでAccessKeyペアをリクエストおよび管理できます。 AccessKey ID はユーザーの ID を示します。 AccessKey Secret は、署名文字列を暗号化し、サーバー側で署名文字列を検証するために使用されるキーです。 AccessKeyシークレットは厳密に機密保持する必要があります。
次の手順を実行して、リクエストに署名します。
- リクエストパラメータを使用して、正規化クエリ文字列を作成します。
- すべてのリクエストパラメーターをパラメーター名のアルファベット順に並べ替えます。 これらのパラメーターには、「共通パラメーター」のトピックに記載されている共通のリクエストパラメーターと、操作固有のパラメーターが含まれます。 ただし、Signatureパラメーターは含まれません。 重要 GETメソッドを使用してリクエストを送信する場合、リクエストパラメーターはリクエストURLの一部として含まれます。 リクエストパラメーターはリクエストURLの疑問符 (?) の後に続き、アンパサンド (&) と連結されます。
- 各リクエストパラメータの名前と値をエンコードします。 パラメーター名と値は、次のエンコード規則に基づいてUTF-8でURLエンコードする必要があります。
- 英大文字 (A〜Z)、英小文字 (a〜z)、数字 (0〜9)、ならびに特殊文字のハイフン (-)、アンダースコア (_)、ピリオド (.)、およびチルダ (~) はエンコードしません。
- 他の文字を % XY形式にエンコードします。 XYは、文字に対応するASCIIコードの16進値である。 たとえば、二重引用符 (“) は %22 とエンコードします。
- 拡張UTF-8文字は % XY % ZA... 形式でエンコードされます。
- プラス記号 (+) の代わりに % 20としてスペースをエンコードします。 重要 s java.net.URLEncoderなどのURLエンコーディングをサポートするほとんどのライブラリは、「application/x-www-form-urlencoded」の多目的インターネットメール拡張機能 (MIME) エンコーディングルールに準拠しています。 このエンコード方法を使用する場合は、各プラス記号 (+) を % 20に、各アスタリスク (*) を % 2Aに、% 7Eをチルダ (~) に置き換えます。
- 等号 (=) を使用して、URLでエンコードされた各リクエストパラメーターの名前と値をキーと値のペアとして接続します。
- 等号 (=) で接続されたキーと値のペアをアルファベット順に並べ替え、アンパサンド (&) で区切り、正規化されたクエリ文字列を取得します。
- すべてのリクエストパラメーターをパラメーター名のアルファベット順に並べ替えます。 これらのパラメーターには、「共通パラメーター」のトピックに記載されている共通のリクエストパラメーターと、操作固有のパラメーターが含まれます。 ただし、Signatureパラメーターは含まれません。
- 正規化されたクエリ文字列を使用して、次のルール
のパラメータ:に基づいて署名用の文字列を作成します。HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)- HTTPMethod:リクエストの送信に使用する HTTP メソッド (GET など) を示します。
- percentEncode("/"): 1.bに記載されているURLエンコーディングルールに基づいたスラッシュ (/) のエンコード値。 エンコードされた値は % 2Fです。
- percentEncode(CanonicalizedQueryString): 手順1で構築された正規化クエリ文字列を使用してエンコードされた文字列。 エンコーディングは、ステップ1.iiで説明したURLエンコーディング規則に従います。
- 上記の文字列を使用して、RFC 2104で定義されている署名のハッシュベースのメッセージ認証コード (HMAC) 値を計算します。 重要 署名の計算に使用されるキーは、アンパサンド (&) (ASCII:38) が付加された AccessKey secret です。 計算には SHA1 が使用されます。
- Base64 を使用して、HMAC 値を文字列にエンコードします。 エンコードされた文字列が署名となります。
- signatureパラメーターの値として、署名文字列をリクエストに追加します。 AccessingToSign文字列は次のとおりです。説明
リクエストパラメーターの最終値として署名文字列をPolarDBサーバーに送信する場合、RFC 3986で定義されているルールに基づいて、文字列を他のパラメーターとしてURLエンコードする必要があります。
たとえば、DescribeDBClusters操作の署名なしのリクエストURLは次のとおりです。
http://polardb.aliyuncs.com/?Timestamp=2013-06-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBClusters&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2014-08-15&SignatureVersion=1.0
% 3DDescribeDBClusters&Format % 3DXML&RegionId % 3Dregion1&SignatureMethod % 3DHMAC-SHA1&SignatureNononceOnce % 3D252514-3D2013-secretキーであるキー そして署名の HMAC 値を計算するために使用されるキーは testsecret& です。 計算された署名文字列はGET&% 2F&AccessKeyId % 3Dtestid&Action %BIPOMlu8LXBeZtLQkJTw6iFvw1E=です。次の例は、Signatureパラメーターを持つリクエストURLを示しています。
http://polardb.aliyuncs.com/?Timestamp=2013-06-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBClusters&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2014-08-15&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D