OSS へのリクエストを開始する際は、Authorization リクエストヘッダーに V4 署名を含めてください。これにより、認証が成功します。複雑な V4 署名アルゴリズムを実装している OSS SDK を使用してリクエストを開始できます。SDK を使用できない場合にのみ、V4 署名アルゴリズムを自ら実装してください。詳細については、「このドキュメント」をご参照ください。
SDK 署名の実装
V4 署名アルゴリズムを自分で実装する場合は、まず SDK の V4 署名実装をご参照ください。
SDK | V4 署名の実装 |
Authorization リクエストヘッダー
OSS へのリクエストを開始する際は、リクエストの検証のために、Authorization リクエストヘッダーに署名を含めてください。
Authorization リクエストヘッダーのフォーマットは次のとおりです。
Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>以下の表では、Authorization リクエストヘッダーについて説明します。
コンポーネント | 説明 |
OSS4-HMAC-SHA256 | 署名計算のアルゴリズムを指定します。この文字列は、OSS V4 署名バージョン (OSS4) と署名アルゴリズム (HMAC-SHA256) を定義します。V4 署名を使用して認証を行う際に、この値を指定してください。 |
Credential | AccessKey ID とスコープ情報 (署名計算に使用される日付、リージョン、クラウド製品を含む) です。V4 署名を使用して認証を行う際に、このフィールドを指定してください。 形式は次のとおりです。 ここで、
|
AdditionalHeaders | 署名計算用のオプションのリクエストヘッダーを指定します (必須ヘッダーは指定しないでください)。小文字のヘッダー名のみを含め、辞書順にソートし、セミコロン (;) で区切ります。 例: |
Signature | 計算された署名です。V4 署名を使用して認証を行う際に、このフィールドを指定してください。 64 個の小文字の 16 進数で表される 256 ビットの署名値の例: |
署名計算
OSS がリクエストを受信すると、署名を計算し、Authorization リクエストヘッダー内の署名と比較します。署名が一致する場合、リクエストは成功します。それ以外の場合、リクエストは失敗します。
署名計算プロセス
次の図は、署名計算プロセスを示しています。
署名計算プロセスは、次の 3 つのステップで構成されます。
正規リクエストの構築: OSS 署名仕様に従ってリクエストをフォーマットし、正規リクエストを作成します。
署名文字列の構築: 正規リクエストを処理して、署名文字列を生成します。
署名の計算: AccessKey Secret に対して複数のハッシュ操作を実行して派生キーを生成します。次に、派生キーを使用して署名文字列を計算し、最終的な署名を取得します。
1. 正規リクエストの構築
正規リクエストの形式は次のとおりです。
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoad正規リクエストは次のように定義されます。
パラメーター | 説明 |
HTTP Verb | PUT、GET、POST、HEAD、DELETE、OPTIONS などの HTTP リクエストメソッドです。 |
Canonical URI | URI エンコード済みのリソースパスです。リソースパスにはクエリ文字列は含まれません。フォワードスラッシュ(
|
Canonical Query String | URI エンコードされたクエリパラメーターで、辞書順にソートされます。
|
Canonical Headers | リクエストヘッダーのリストです。 リクエストヘッダーは次の 3 つのカテゴリに分類されます。
形式は次のとおりです。 例: |
Additional Headers | 署名計算用のオプションのリクエストヘッダーを指定します (必須ヘッダーは指定しないでください)。小文字のヘッダー名のみを含め、辞書順にソートし、セミコロン (;) で区切ります。これは 例: |
Hashed PayLoad | リクエストペイロードの SHA256 ハッシュ値の 16 進数表現です。現在、 |
2. 署名文字列の構築
署名文字列の形式は次のとおりです。
"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))次の表は、署名文字列について説明しています。
パラメーター | 説明 |
OSS4-HMAC-SHA256 | 署名ハッシュアルゴリズムです。その値は |
TimeStamp | 現在の UTC 時刻です。その形式は |
Scope | キーを派生させるためのパラメーターセットです。このセットは、日付、リージョン、およびサービスを指定します。したがって、派生キーで計算された署名は、指定された日付、リージョン、およびサービスに対してのみ有効です。 形式は次のとおりです。 説明は次のとおりです。
|
CanonicalRequest | 構築された正規リクエストです。 |
3. 署名の計算
署名計算は、次の 2 つのステップで構成されます。
SigningKeyを計算します。DateKey = HMAC-SHA256("aliyun_v4" + SK, Date); DateRegionKey = HMAC-SHA256(DateKey, Region); DateRegionServiceKey = HMAC-SHA256(DateRegionKey, "oss"); SigningKey = HMAC-SHA256(DateRegionServiceKey, "aliyun_v4_request");SK: 署名に使用される AccessKey Secret です。Date: 署名に使用される日付です。YYYYMMDD形式です。署名文字列のSignDateと一致する必要があります。Region: 署名に使用されるリージョン IDです (cn-hangzhouなど)。署名対象文字列内のSignRegionと一致する必要があります。
SigningKeyと署名文字列を使用してSignatureを計算します。Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))
署名計算例
この例では、PutObject を使用して署名計算をデモンストレーションします。
署名計算パラメーター
パラメーター | 値 |
AccessKeyId | LTAI**************** |
AccessKeySecret | yourAccessKeySecret |
Timestamp | 20250411T064124Z |
Bucket | examplebucket |
Object | exampleobject |
Region | 中国 (杭州) |
署名計算プロセスの例
正規リクエストを構築します。
PUT /examplebucket/exampleobject content-disposition:attachment content-length:3 content-md5:ICy5YqxZB1uWSwcVLSNLcA== content-type:text/plain x-oss-content-sha256:UNSIGNED-PAYLOAD x-oss-date:20250411T064124Z content-disposition;content-length UNSIGNED-PAYLOAD署名文字列を構築します。
OSS4-HMAC-SHA256 20250411T064124Z 20250411/cn-hangzhou/oss/aliyun_v4_request c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca署名を計算します。
SigningKey を計算します。
説明可読性を高めるため、
SigningKeyは以下に 16 進数形式で示されています。署名パラメーターの組み合わせが異なると、異なる
SigningKey値が生成されます。この例は参照のみを目的としています。実際の計算結果を使用してください。
3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76Signature を計算します。
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23