署名生成
説明
以下は、署名付きリクエストを作成するプロセスの概要です。署名を計算するには、まず署名する文字列が必要です。次に、署名キーを使用して署名する文字列のHMAC-SHA256ハッシュを計算します。
署名付きリクエストを送信するには、アカウントマネージャーから提供されるSIGNATURE_SECRETが必要です。
ステップ 1: リクエストメソッド (requestMethod)
HTTPリクエストメソッドを取得します。例: GET, PUT, HEAD, DELETE
ステップ 2: ホスト (host)、リクエストパス (requestPath) およびクエリ文字列 (queryString)
1. ホスト: サーバーのホスト名
2. リクエストパス: 完全なURLパス(例: /v1/resources)
3. クエリ文字列: **"?"**なしのURLパラメータ。パラメータがない場合は空の文字列になります(例: param1=value1¶m2=value2)
ステップ 3: ペイロードダイジェスト生成 (payloadDigest)
リクエストにペイロードが含まれている場合
1. SHA256を使用してボディをエンコードし、計算されたペイロードダイジェストを取得します。 2. 計算された値を小文字のHEX形式に変換します。
リクエストにペイロードがない場合、ペイロードダイジェストは空になります。
ステップ 4: 署名アルゴリズム (signatureAlgorithm)
**HMAC SHA-256 (hmac-sha256)またはSHA-512 (hmac-sha512)**のいずれかを使用できます。
デフォルト = hmac-sha256
ステップ 5: 署名バージョン (signatureVersion)
デフォルトの署名バージョン = 1.0
ステップ 6: 署名キーID (signatureKeyId)
デフォルトの署名キーID = 2
ステップ 7: 署名タイムスタンプ作成 (signatureTimestampString)
署名タイムスタンプはYYYY-MM-DD HH:mm:ss形式でUTC+00:00である必要があります(例: 2025-03-20 10:12:34)
ステップ 8: ノンス生成 (nonce)
少なくとも16バイトのランダムな英数字の文字列を生成してノンスを作成します。
ステップ 9: 署名文字列生成 (signatureString)
以下の順序でコンポーネントを「:」区切りで連結して署名文字列(signatureString)を再構築します。
1. リクエストメソッド (requestMethod) を大文字で(例: POST)
2. ホスト (host)(例: api.cpaas.symphony.rakuten.net)
3. リクエストパス (requestPath)(例: /v1/resources)
4. クエリ文字列 (queryString)(例: param1=value1¶m2=value2)
5. 生成されたペイロードダイジェスト (payloadDigest)(例: a1b2c3d4…)
6. 署名アルゴリズム (signatureAlgorithm)(例: hmac-sha256)
7. 署名バージョン (signatureVersion)(例: 1.0)
8. 署名キーID (signatureKeyId)(例: 2)
9. タイムスタンプ (signatureTimestampString)(例: 2025-03-11 10:00:00)
10. ノンス (nonce)(例: abc123xyz789)
最終文字列形式:
requestMethod:host:requestPath:queryString:payloadDigest:signatureAlgorithm:signatureVersion:signatureKeyId:signatureTimestampString:nonce:
例:
POST:api.cpaas.symphony.rakuten.net:/v1/resources:param1=value1¶m2=value2:a1b2c3d4...:hmac-sha256:1.0:2:2025-03-11 10:00:00:abc123xyz789:
重要なルール:
1. コンポーネントの順序を正確に維持すること
2. コロン「:」区切りを使用すること。連結された文字列の末尾にはトレーリング「:」があります
3. 区切り文字の周りにスペースを入れないこと
4. 空の値には区切り文字を含めること
5. 大文字と小文字を区別する値
ステップ 10: 署名生成 (signature)
**HMAC-SHA256 (signatureString, secretKey)**をエンコードして最終署名を生成します。ここで、secretKey = SIGNATURE_SECRETはRakuten CPaaSから提供されます。
ステップ 11: ヘッダー割り当て
リクエストを行う際に、HTTPレスポンスヘッダーに値を設定します。
ヘッダー名 | 生成された値 |
---|---|
host | host |
x-api-signature-algorithm | signatureAlgorithm |
x-api-signature-version | signatureVersion |
x-api-signature-keyid | signatureKeyId |
x-security-signature-timestamp | signatureTimestampString |
x-api-nonce | Nonce |
x-api-payload-digest | payloadDigest |
x-api-signature | signature |