付録1:HTTP署名検証アルゴリズムと一般的なエラーコード
HTTP署名検証アルゴリズム
概要
ACEコンテンツモデレーションAPIでは、リクエストの認証にHTTP署名検証メカニズムを使用します。各APIリクエストには、適切な署名ヘッダーを含める必要があります。
署名の生成手順
- 正規化文字列の構築:HTTPメソッド、リクエストパス、タイムスタンプ、リクエストボディを連結
- HMAC-SHA256による署名生成:SecretKeyを使用してハッシュを計算
- Base64エンコード:署名値をBase64形式に変換
- Authorizationヘッダーへの設定
署名文字列の構築
StringToSign = HTTPMethod + "\n" +
RequestPath + "\n" +
Timestamp + "\n" +
MD5(RequestBody)署名の計算
Signature = Base64(HMAC-SHA256(SecretKey, StringToSign))Authorizationヘッダーの形式
Authorization: ACE AppId:{Signature}:{Timestamp}実装例(Python)
python
import hmac
import hashlib
import base64
import time
import json
def generate_signature(secret_key, method, path, body):
timestamp = str(int(time.time()))
body_md5 = hashlib.md5(body.encode('utf-8')).hexdigest()
string_to_sign = f"{method}\n{path}\n{timestamp}\n{body_md5}"
signature = base64.b64encode(
hmac.new(
secret_key.encode('utf-8'),
string_to_sign.encode('utf-8'),
hashlib.sha256
).digest()
).decode('utf-8')
return signature, timestamp一般的なエラーコード
| エラーコード | 説明 | 対処方法 |
|---|---|---|
| 100 | 成功 | — |
| 101 | パラメータ不正 | リクエストパラメータを確認 |
| 102 | 認証失敗 | AppIdおよび署名を確認 |
| 103 | タイムスタンプ期限切れ | サーバー時刻を同期 |
| 104 | レート制限超過 | リクエスト頻度を低減 |
| 105 | アクセス拒否 | 権限設定を確認 |
| 200 | 内部サーバーエラー | 再試行またはサポートに連絡 |
| 201 | サービス一時停止 | しばらく後に再試行 |
| 202 | タイムアウト | 再試行 |
注意事項
- タイムスタンプはUNIXタイムスタンプ(秒)を使用
- タイムスタンプの有効期間は±5分です
- SecretKeyは安全に管理し、クライアント側コードに埋め込まないでください