すべてのプロダクト
Search
ドキュメントセンター

:承認ヘッダーにV4署名を含める (推奨)

最終更新日:Mar 12, 2024

Object Storage Service (OSS) では、HTTP Authorizationヘッダーを使用することが、認証情報を提供する最も一般的な方法です。 POSTリクエストとクエリパラメーターを使用して署名されたリクエストを除き、すべてのOSS操作で認証にAuthorizationリクエストヘッダーが使用されます。 このトピックでは、URLにV4署名を含める方法について説明します。

OSS SDKを使用したV4シグネチャの自動実装

OSS SDKはV4シグネチャの自動実装をサポートしています。 OSS SDKを使用してリクエストを開始することを推奨します。 これにより、署名を手動で計算する必要がなくなります。 異なるプログラミング言語でOSS SDKを使用する場合にV4署名アルゴリズムを使用してリクエストに署名する方法の詳細については、OSS SDKのサンプルコードをご参照ください。 次の表に、さまざまなプログラミング言語でOSS SDKを使用する場合に、V4署名アルゴリズムを使用してリクエストに署名するために使用されるサンプルコードへの参照を示します。

SDK

サンプルコード

Java

OSSV4Signer.java

PHP

SignerV4.php

Node.js

client.js

Browser.js

Python

auth.py

Go

v4.go

C++

SignerV4.cc

C

oss_auth.c

承認ヘッダーの計算

Authorizationヘッダーの署名アルゴリズムのバージョンと署名情報をスペースで区切ります。 次の表に、Authorizationヘッダーのコンポーネントを示します。

コンポーネント

説明

署名アルゴリズムのバージョン

署名の計算に使用されるアルゴリズム。 有効値: OSS4-HMAC-SHA256

署名情報

署名の計算に使用されるパラメーター。 署名情報は、キーと値のペアの形式である。 キーと値のペアをコンマ (,) で区切り、キーと値を等号 (=) で接続します。 署名情報のキーには、2つの必須フィールド (Credentialsignature) と1つのオプションフィールド (AdditionalHeaders) が含まれます。

  • 資格情報: AccessKey IDとスコープ情報。スラッシュ (/) で区切られています。

  • Signature: 計算された署名。

  • AdditionalHeaders: 署名の計算に使用されるオプションのリクエストヘッダー。 複数のヘッダーを指定する場合は、セミコロン (;) で区切ります。 ヘッダーキーは大文字と小文字を区別しないため、辞書式にソートする必要があります。

  • Format

    権限付与: "OSS4-HMAC-SHA256 Credential=" + AccessKeyId + "/" + SignDate + "/" + SignRegion + "/oss/aliyun_v4_request, " + [ "AdditionalHeaders=" + AdditionalHeadersVal + ", " ] + "Signature=" + SignatureVal
  • 例:

    権限付与: OSS4-HMAC-SHA256資格=AKIDEXAMPLE/20231203/cn-hangzhou/oss/aliyun_v4_request, AdditionalHeaders=host;userdefine, Signature=34b48302e7b5fa45bde8084f4b7868a86f0a534bc59db6670ed5711ef69dc6f 7

署名計算プロセス

image

ステップ1: 正規リクエストを作成する

リクエストのコンテンツを標準形式に変換します。

Format

HTTP動詞 + "\n" +
正規URI + "\n" +
正規クエリ文字列 + "\n" +
Canonicalヘッダー + "\n" +
追加ヘッダー + "\n" +
ハッシュペイロード 

次の表に、上記のパラメーターを示します。

パラメーター

データ型

必須

説明

HTTP動詞

列挙

PUT

HTTPリクエストのメソッド。PUT、GET、POST、HEAD、DELETE、またはOPTIONSです。

正規URI

String

必須

/examplebucket/exampleobject

URIエンコードされた文字列。 絶対パスでスラッシュ (/) をエンコードしないでください。

  • URIは、ドメイン名に続くスラッシュ (/) で始まり、クエリ文字列パラメーターが含まれていない場合は文字列の最後まで続きます。

  • URIは、ドメイン名に続くスラッシュ (/) で始まり、クエリ文字列パラメーターが含まれている場合は疑問符 (?) で終わります。

次の項目では、リクエストURIに含まれるリソースに基づいて正規URIを指定する方法について説明します。

  • リクエストURIにバケット名とオブジェクト名の両方が含まれている場合、正規URIは次の形式になります。

    /examplebucket/exampleobjectを使用します。

  • リクエストURIにバケット名のみが含まれる場合、正規URIの形式は /examplebucket/ です。

  • 要求されたURIにオブジェクト名のみが含まれる場合、正規URIは /に設定されます。

正規クエリ文字列Canonical Query String

String

必須

UriEncode("marker") "=" UriEncode("someMarker") "&" UriEncode("max-keys") "=" UriEncode("20") "&" UriEncode("prefix") "=" UriEncode("somePrefix")

URIエンコードされたクエリ文字列パラメーター。 各キーと値を個別にURIエンコードする必要があります。

  • 正規クエリ文字列のパラメーターをキー名でアルファベット順に並べ替えます。 ソートはエンコード後に行われます。 複数の同一のキーが存在する場合は、最初に追加された順序でキーを並べ替えます。

  • キーに値がない場合は、キーのみを追加します。

  • リクエストにクエリ文字列が含まれていない場合は、正規クエリ文字列を空の文字列 ("") に設定します。 最後に改行を追加する必要があります。

Canonicalヘッダー

String

必須

hos t:cname.com
x-oss-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-oss-date:20231203T12121 2Z 

リクエストヘッダーとその値のリストを含む文字列。 文字列の末尾に "\n" を追加します。

  • ヘッダーキーと値はコロン (:) で区切り、ヘッダーは改行で区切ります。

  • ヘッダーキーは小文字で、アルファベット順に並べ替える必要があります。 ヘッダー値の先頭または末尾のスペースをトリミングする必要があります。

  • リクエスト時間は、x-oss-dateヘッダーで指定します。 時間はISO 8601標準に従い、UTCで表示されます。 例: 20231203T1212Z。

Canonicalヘッダーは2つのタイプに分けられます。

  • 存在する必要があり、署名計算に使用されるヘッダー:

    • x-oss-content-sha256 (有効値: UNSIGNED-PARYLOAD)

    • 追加ヘッダーで指定され、署名の計算に使用されるヘッダー:

  • リクエストに含まれている場合にCanonicalヘッダーに追加する必要があるヘッダー:

    • Content-Type

    • Content-MD5

    • x-oss-*

追加ヘッダー

String

必須

content-length; ホスト

署名を計算するために追加するヘッダー。 すべてのヘッダーは小文字でアルファベット順に並べ替える必要があります。

ハッシュペイロード

String

必須

UNSIGNED-PAYLOAD

有効値: UNSIGNED-PAYLOAD

"GET" | "PUT" |... + "\n" +
UriEncode(<リソース>) + "\n" +
UriEncode(<QueryParam1>) + "=" + UriEncode(<Value>) + "&" + UriEncode(<QueryParam2>) + "\n" +
小文字 (<HeaderName1>) ":" + Trim(<value>) + "\n" + 小文字 (<HeaderName2>) + ":" + Trim(<value>) + "\n" + "\n"
小文字 (<AdditionalHeaderName1>) + ";" 小文字 (<AdditionalHeaderName2>) + "\n" +
未承認-ペイロード 

ステップ2: 署名する文字列の作成

次の文字列を連結して、署名する文字列を作成します。

  • Format

    "OSS4-HMAC-SHA256" + "\n" +
    タイムスタンプ + "\n" +
    スコープ + "\n" +
    HashedPayLoad 

    次の表に、上記のパラメーターを示します。

    パラメーター

    データ型

    必須

    説明

    OSS4-HMAC-SHA256

    列挙

    OSS4-HMAC-SHA25

    正規リクエストのハッシュを作成するために使用されるアルゴリズム。 有効値: OSS4-HMAC-SHA256

    タイムスタンプ

    String

    必須

    20231203T1212Z

    現在のUTC時刻。 時間は、ISO 8601規格に従わなければならない。

    スコープ

    String

    必須

    20240118/cn-hangzhou/oss/aliyun_v4_request

    スコープ情報。 これにより、結果の署名が指定されたリージョンとサービスに制限されます。 形式:

    <SigningDate>/<SigningRegion>/oss/aliyun_v4_request
    • SigningDate: リクエストが開始された日付。

    • SigningRegion: 要求されたリソースが存在するリージョン。

    • oss: 要求されたサービスの名前。 有効値: oss。

    • aliyun_v4_request: リクエスト内の署名バージョンの説明。 有効値: aliyun_v4_request

    HashedPayLoad

    String

    必須

    UNSIGNED-PAYLOAD

    有効値: UNSIGNED-PAYLOAD

  • 例:

    "OSS4-HMAC-SHA256" + "\n" +
    FormatISO8601 + "\n" +
    20231203/cn-hangzhou/oss/aliyun_v4_request + "\n" +
    未承認-ペイロード 

ステップ3: 署名を計算する

署名キーを取得したら、署名する文字列に対してキー付きハッシュ操作を実行して署名を計算します。 この操作のハッシュキーとして、派生した署名キーを使用します。

  1. 署名キーを計算します。

    HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("aliyun_v4" + SK, 日付)), 地域), "oss"), "aliyun_v4_request");
  2. 署名を計算します。

    HEX(HMAC-SHA256(SigningKey, StringToSign))

署名の計算例

この例では、PutObjectを使用して、AuthorizationヘッダーにV4署名を含める方法を説明します。

  • パラメーター

    パラメーター

    AccessKeyId

    accesskeyid

    AccessKeySecret

    accesskeysecret

    Timestamp

    20231203T1212Z

    バケット

    examplebucket

    オブジェクト

    exampleobject

    Region

    cn-hangzhou

  • PutObject

    PUT /exampleobject HTTP/1.1
    Content-MD5: eB5eJF1ptWaXm4bijSPyxw
    コンテンツタイプ: text/html
    日付: 12月3日日曜日2023 12:12:12GMT
    ホスト: examplebucket.oss-cn-hangzhou.aliyuncs.com
    権限付与: SignatureToBeCalculated
    x-oss-date: 20231203T121212Z
    x-oss-meta-author: alice
    x-oss-meta-magic: abracadabra
    x-oss-content-sha256: UNSIGNED-PAYLOAD 

V4署名をAuthorizationヘッダーに含めるには、次の手順を実行します。

  1. 正規のリクエストを作成します。

    PUT
    /examplebucket/exampleobject
    
    content-md5:eB5eJF1ptWaXm4bijSPyxw
    content-type:text/html
    hos t:examplebucket.oss-cn-hangzhou.aliyuncs.com
    x-oss-content-sha256:UNSIGNED-PAYLOAD
    x-oss-date:20231203T121212Z
    x-oss-meta-author:alice
    x-oss-meta-magic:abracadabra
    
    ホスト
    未承認-ペイロード 
  2. 署名する文字列を作成します。

    OSS4-HMAC-SHA256
    20231203T1212Z
    20231203/cn-hangzhou/oss/aliyun_v4_request
    129b14df88496f434606e999e35dee010ea1cecfd3ddc378e5ed4989609c1db 3 
  3. 署名を計算します。

    1. 署名キーを計算します。

      説明

      読みやすくするために、署名キーのBase64-encoded値を次の例に示します。

      WVjaYR8lCj9YC5PUS2RSZQANYbuh9DhMFxjU1NtZKfc=
    2. 署名を計算します。

      4b663e424d2db9967401ff6ce1c86f8c83cabd77d9908475239d9110642c6 3fa
  4. 署名をAuthorizationヘッダーに追加します。

    OSS4-HMAC-SHA256 Credential=accesskeyid/20231203/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=host,Signature=4b663e424d2db9967401ff6ce1c86f8c83cabd77d9908475239d9110642c6 3fa