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

Drive and Photo Service:AccessKey ペアを使用した PDS API の呼び出し

最終更新日:Dec 28, 2024

説明

Photo and Drive Service (PDS) API は、2 つの認証モードをサポートしています。アクセストークンに基づく認証に加えて、PDS API は AccessKey ペアに基づく認証もサポートしています。AccessKey ペアを使用して API リクエストに署名し、署名付きリクエストを送信して API 操作を呼び出すことができます。

1. AccessKey ペアを使用して API 操作を呼び出すサンプルリクエスト

AccessKey ペアを使用して署名されたリクエストを送信することで、以下のエンドポイント内のすべての API 操作を呼び出すことができます。

エンドポイント

説明

https://${domainID}.api.aliyunpds.com

リソース関連の API 操作と認証および認可 API 操作のエンドポイントです。

サンプルリクエスト:

POST /v2/drive/list

Host: ${domainID}.api.aliyunpds.com
Authorization: acs ${ACCESS_KEY_ID}:${SIGNATURE}
Content-Type: application/json; charset=UTF-8

{
  "owner": "xxxx"
}

2. AccessKey ペアを使用してリクエストに署名する

HTTP リクエストに Authorization ヘッダーを追加して、リクエストに署名を含めることができます。この署名は、リクエストが承認されていることを示します。

2.1 署名の計算方法

次の例では、Alibaba Cloud SDK のリソース指向アーキテクチャ (ROA) リクエストスタイルを使用しています。Alibaba Cloud SDK がアクセス可能であることを確認してください。

Authorization = "acs " + AccessKeyId + ":" + Signature
Signature = base64(hmac-sha1(AccessKeySecret,
            VERB + "\n"
            + Accept + "\n"
            + Content-MD5 + "\n"
            + Content-Type + "\n"
            + Date + "\n"
            + CanonicalizedHeaders
            + CanonicalizedResource))
  • AccessKeySecret: リクエストの署名に使用する AccessKey シークレット。

  • VERB: HTTP リクエストのメソッド。値を POST に設定します。

  • \n: 改行。

  • Accept: オプション。このヘッダーを指定する場合は、値を application/json に設定します。

  • Content-MD5: リクエストコンテンツの MD5 ハッシュ。リクエスト本文が空でない場合にのみ、このヘッダーを指定する必要があります。ヘッダーを除くリクエストコンテンツの MD5 ハッシュを計算して、128 ビットの数値を取得します。この数値を Base64 でエンコードして、このヘッダーの値を取得します。このヘッダーを使用して、受信したリクエストコンテンツが送信されたリクエストコンテンツと同じであるかどうかを確認できます。例: eB5eJF1ptWaXm4bijSPyxw==。詳細については、Request for Comments (RFC) 2616 の Content-MD5 を参照してください。

  • Content-Type: オプション。このヘッダーは、リクエストコンテンツのタイプを指定します。例: application/octet-stream

  • Date: 必須。このヘッダーは、リクエストが送信された時刻をグリニッジ標準時 (GMT) で指定します。例: Sun, 22 Nov 2015 08:16:38 GMT

  • CanonicalizedHeaders: x-acs- というプレフィックスが付いた HTTP ヘッダー。ヘッダーはアルファベット順に並べられています。

  • CanonicalizedResource: アクセスする PDS リソース。Date ヘッダーと CanonicalizedResource 文字列は必須です。リクエストの Date ヘッダーで指定された時刻と、リクエストが受信されたときの PDS サーバーの時刻の差が 15 分を超える場合、PDS はリクエストを拒否し、HTTP ステータスコード 403 を返します。

2.2 CanonicalizedHeaders 文字列の作成方法

CanonicalizedHeaders 文字列は、x-acs- というプレフィックスが付いたすべての HTTP ヘッダーで構成されます。CanonicalizedResource 文字列を作成するには、次の手順を実行します。

  1. x-acs- というプレフィックスが付いたすべての HTTP ヘッダーの名前を小文字に変換します。たとえば、X-ACS-Meta-Name: TaoBaox-acs-meta-name: TaoBao に変換します。

  2. Security Token Service (STS) によって提供された AccessKey ペアを使用してリクエストが送信される場合は、security-token 値を x-acs-security-token:security-token の形式で CanonicalizedHeaders 文字列に追加します。

  3. 前の手順で取得したすべての HTTP ヘッダーをアルファベット順にソートします。

  4. 各ヘッダーと値の間の区切り文字の両側のスペースをすべて削除します。たとえば、x-acs-meta-name: TaoBaox-acs-meta-name:TaoBao に変換します。

  5. 区切り文字 \n で 2 つのヘッダーとその値のペアを区切って、CanonicalizedHeaders 文字列を取得します。

説明

リクエストに x-acs- というプレフィックスが付いた HTTP ヘッダーが含まれていない場合は、CanonicalizedHeaders 文字列を空のままにすることができます。この場合、空の文字列に末尾の \n 区切り文字を追加する必要はありません。リクエストに x-acs- というプレフィックスが付いた 1 つ以上の HTTP ヘッダーが含まれている場合は、取得した CanonicalizedHeaders 文字列に末尾の \n 区切り文字を追加する必要があります。例: x-acs-meta-a\n および x-acs-meta-a:a\nx-acs-meta-b:b\nx-acs-meta-c:c\n。

2.3 CanonicalizedResource 文字列の作成方法

CanonicalizedResource 文字列は、アクセスする PDS リソースを指定します。CanonicalizedResource 文字列を作成するには、次の手順を実行します。

  1. CanonicalizedResource 文字列を空の文字列 "" に設定します。

  2. アクセスする PDS リソースを空の文字列に追加します。例: /v2/domain/list

2.4 署名の計算規則

  • 署名対象の文字列は UTF-8 でエンコードする必要があります。UTF-8 エンコードされた署名対象の文字列と AccessKeySecret を使用して署名を計算します。

  • RFC 2104 で定義されている HMAC-SHA1 メソッドを使用して署名を計算します。このメソッドでは、AccessKeySecret がキーとして使用されます。

  • AcceptContent-Type、および Content-MD5 ヘッダーは、リクエストではオプションです。リクエストでこれらのヘッダーが空の場合、リクエストの署名を計算するときに、改行 (\n) に置き換えます。

  • すべての非標準 HTTP ヘッダーの中で、x-acs- というプレフィックスが付いたヘッダーのみを署名対象の文字列に追加する必要があります。その他の非標準 HTTP ヘッダーは無視されます。

  • 署名対象の文字列内の x-acs- というプレフィックスが付いたヘッダーは、次の規則に準拠する必要があります。

  • ヘッダー名は小文字です。

  • ヘッダーはアルファベット順にソートされます。

  • 各ヘッダー名と値を区切るコロン (:) の前後にスペースはありません。

  • 各ヘッダーの後には改行 (\n) が続きます。リクエストに x-acs- というプレフィックスが付いたヘッダーが含まれていない場合は、CanonicalizedHeaders 文字列を末尾の \n 区切り文字のない空の文字列として指定します。

2.5 トラブルシューティング

  • Accept ヘッダーを指定する場合は、値が application/json であることを確認します。そうでない場合、エラー 400 Bad Request が返されます。エラーコードは InvalidHeader です。

  • 本文の長さが 4 MB を超えていないことを確認します。本文の長さが 4 MB を超える場合、エラー 400 Bad Request が返されます。エラーコードは InvaliField です。

  • Authorization ヘッダーの形式が無効な場合、エラー 400 Bad Request が返されます。エラーコードは InvaliField です。

  • AccessKey ID が STS で始まる場合は、x-acs-security-token ヘッダーが設定されていることを確認します。そうでない場合、エラー 403 Forbidden が返されます。エラーコードは InvalidHeader です。

  • AccessKey ID が存在しないか、無効状態の場合、エラー 403 Forbidden が返されます。エラーコードは InvalidParameter です。

  • AccessKey ID が有効状態であるが、PDS がリクエストの署名が無効であることを検出した場合、エラー 403 Forbidden が返されます。エラーコードは SignatureDoesNotMatch です。署名の検証に使用される署名対象の文字列も response で返されます。レスポンスに基づいて、署名文字列が正しいかどうかを確認できます。

3. 権限制御

PDS API サーバーは、Alibaba Cloud Resource Access Management (RAM) を使用して権限を検証します。RAM コンソール で使用する RAM ユーザーの AccessKey ペアの権限ポリシーを設定できます。

次の表は、各 API 操作で検証されるアクションとリソースを示しています。

操作

アクション

リソース

ListStores(/v2/domain/liststores)

pds:ListStores

acs:pds:$regionid:$accountid:domain/$domainid/store/*

ListStoreFiles(/v2/storefile/list)

pds:ListStoreFiles

acs:pds:$regionid:$accountid:domain/$domainid

CreateDrive(/v2/drive/create)

pds:CreateDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/*

ListDrives(/v2/drive/list)

pds:ListDrives

acs:pds:$regionid:$accountid:domain/$domainid/drive/*

GetDrive(/v2/drive/get)

pds:GetDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

UpdateDrive(/v2/drive/update)

pds:UpdateDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

DeleteDrive(/v2/drive/delete)

pds:DeleteDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

ListMyDrives(/v2/drive/list_my_drives)

pds:ListMyDrives

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

ListMyShares(/v2/drive/list_my_shares)

pds:ListMyShares

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

CreateUser(/v2/user/create)

pds:CreateUser

acs:pds:$regionid:$accountid:domain/$domainid/user/*

GetUser(/v2/user/get)

pds:GetUser

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

ListUsers(/v2/user/list)

pds:ListUser

acs:pds:$regionid:$accountid:domain/$domainid/user/*

UpdateUser(/v2/user/update)

pds:UpdateUser

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

DeleteUser(/v2/user/delete)

pds:DeleteUser

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

SearchUser(/v2/user/search)

pds:SearchUser

acs:pds:$regionid:$accountid:domain/$domainid/user/*

GetUserAccessToken(/v2/user/get_access_token)

pds:GetUserAccessToken

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

CreateShare(/v2/share/create)

pds:CreateShare

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetShare(/v2/share/get)

pds:GetShare

acs:pds:$regionid:$accountid:domain/$domainid/share/$shareid

ListShares(/v2/share/list)

pds:ListShares

acs:pds:$regionid:$accountid:domain/$domainid/share/*

UpdateShare(/v2/share/update)

pds:UpdateShare

acs:pds:$regionid:$accountid:domain/$domainid/share/$shareid

CreateFile(/v2/file/create)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CreateFileWithSignature(/v2/file/create_with_signature)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveidまたは acs:pds:$regionid:$accountid:domain/$domainid/share/$shareid

ListFiles(/v2/file/list)

pds:ListFiles

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CompleteFile(/v2/file/complete)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CompleteFileWithStoreInfo(/v2/file/complete_with_store_info)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFileSignature(/v2/file/get_signature)

pds:GetFileSignature

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFileUploadUrl(/v2/file/get_upload_url)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFileDownloadUrl(/v2/file/get_download_url)

pds:GetFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

DeleteFile(/v2/file/delete)

pds:DeleteFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CopyFile(/v2/file/copy)

pds:CopyFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

MoveFile(/v2/file/move)

pds:MoveFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

UpdateFile(/v2/file/update)

pds:UpdateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFile(/v2/file/get)

pds:GetFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

DownloadFile(/v2/file/get)

pds:GetFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

BatchDeleteFile(/v2/file/batch_delete)

pds:DeleteFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetAsyncTask(/v2/async_task/get)

pds:GetAsyncTask

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

ListImageTags(/v2/image/list_tags)

pds:ListImageTags

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

ListImageFaceGroups(/v2/image/list_facegroups)

pds:ListImageFaceGroups

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

ListFaceGroupImages(/v2/image/list_facegroup_images)

pds:ListFaceGroupImages

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

Batch(/v2/batch)

pds:Batch

acs:pds:$regionid:$accountid:*