全部产品
Search
文档中心

Drive and Photo Service:Akses dengan Memanggil Operasi API Berbasis AccessKey

更新时间:Jun 28, 2025

Catatan

API Layanan Foto dan Drive (PDS) mendukung dua mode otentikasi: berdasarkan token akses dan pasangan AccessKey. Anda dapat menandatangani permintaan API menggunakan pasangan AccessKey dan mengirimkan permintaan yang telah ditandatangani untuk memanggil operasi API.

1. Contoh permintaan untuk memanggil operasi API menggunakan pasangan AccessKey

Anda dapat memanggil semua operasi API pada titik akhir berikut dengan mengirimkan permintaan yang ditandatangani menggunakan pasangan AccessKey.

Titik Akhir

Deskripsi

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

Titik akhir untuk operasi API terkait sumber daya dan operasi API otorisasi serta otentikasi.

Contoh permintaan:

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. Menandatangani permintaan menggunakan pasangan AccessKey

Tambahkan header Authorization ke permintaan HTTP untuk menyertakan tanda tangan, yang menunjukkan bahwa permintaan tersebut diotorisasi.

2.1 Metode Perhitungan Tanda Tangan

Contoh berikut menggunakan gaya permintaan arsitektur berorientasi sumber daya (ROA) dari Alibaba Cloud SDK. Pastikan bahwa Alibaba Cloud SDK dapat diakses.

Authorization = "acs " + AccessKeyId + ":" + Signature
Signature = base64(hmac-sha1(AccessKeySecret,
            VERB + "\n"
            + Accept + "\n"
            + Content-MD5 + "\n"
            + Content-Type + "\n"
            + Date + "\n"
            + CanonicalizedHeaders
            + CanonicalizedResource))
  • AccessKeySecret: Rahasia AccessKey yang digunakan untuk menandatangani permintaan.

  • VERB: Metode permintaan HTTP. Atur nilainya menjadi POST.

  • \n: Baris baru.

  • Accept: Opsional. Jika ditentukan, atur nilainya menjadi application/json.

  • Content-MD5: Hash MD5 dari konten permintaan. Header ini hanya diperlukan jika badan permintaan tidak kosong. Hitung hash MD5 dari konten permintaan (tidak termasuk header), hasilkan angka 128-bit, dan enkode dalam Base64 untuk mendapatkan nilai header ini. Header ini digunakan untuk memverifikasi integritas konten permintaan. Contoh: eB5eJF1ptWaXm4bijSPyxw==. Untuk informasi lebih lanjut, lihat Content-MD5 dalam Request for Comments (RFC) 2616.

  • Content-Type: Opsional. Header ini menentukan jenis konten permintaan. Contoh: application/octet-stream.

  • Date: Wajib. Header ini menentukan waktu pengiriman permintaan dalam Waktu Rata-rata Greenwich (GMT). Contoh: Sun, 22 Nov 2015 08:16:38 GMT.

  • CanonicalizedHeaders: Header HTTP dengan awalan x-acs-, diurutkan secara alfabetis.

  • CanonicalizedResource: Sumber daya PDS yang ingin diakses. Header Date dan string CanonicalizedResource wajib. Jika selisih antara waktu yang ditentukan oleh header Date dan waktu server PDS saat permintaan diterima melebihi 15 menit, PDS akan menolak permintaan dan mengembalikan kode status HTTP 403.

2.2 Cara Membuat String CanonicalizedHeaders

String CanonicalizedHeaders terdiri dari semua header HTTP dengan awalan x-acs-. Untuk membuatnya, ikuti langkah-langkah berikut:

  1. Ubah nama semua header HTTP dengan awalan x-acs- menjadi huruf kecil. Contoh: Ubah X-ACS-Meta-Name: TaoBao menjadi x-acs-meta-name: TaoBao.

  2. Jika permintaan dikirim menggunakan pasangan AccessKey yang disediakan oleh Security Token Service (STS), tambahkan nilai security-token ke string CanonicalizedHeaders dalam format x-acs-security-token:security-token.

  3. Urutkan semua header HTTP yang diperoleh pada langkah sebelumnya secara alfabetis.

  4. Hapus semua spasi di setiap sisi pemisah antara setiap header dan nilainya. Contoh: Ubah x-acs-meta-name: TaoBao menjadi x-acs-meta-name:TaoBao.

  5. Pisahkan setiap dua pasang header dan nilainya dengan pemisah \n untuk mendapatkan string CanonicalizedHeaders.

Catatan

Jika permintaan tidak berisi header HTTP dengan awalan x-acs-, string CanonicalizedHeaders dapat dibiarkan kosong tanpa pemisah \n di akhir. Jika permintaan berisi satu atau lebih header HTTP dengan awalan x-acs-, tambahkan pemisah \n di akhir string CanonicalizedHeaders. Contoh: x-acs-meta-a\n dan x-acs-meta-a:a\nx-acs-meta-b:b\nx-acs-meta-c:c\n.

2.3 Cara Membuat String CanonicalizedResource

String CanonicalizedResource menentukan sumber daya PDS yang ingin diakses. Untuk membuatnya, ikuti langkah-langkah berikut:

  1. Atur string CanonicalizedResource menjadi string kosong "".

  2. Tambahkan sumber daya PDS yang ingin diakses ke string kosong. Contoh: /v2/domain/list.

2.4 Aturan Perhitungan Tanda Tangan

  • String-to-sign harus dienkripsi dalam UTF-8. Gunakan string-to-sign yang dienkripsi dalam UTF-8 dan AccessKeySecret untuk menghitung tanda tangan.

  • Gunakan metode HMAC-SHA1 yang didefinisikan dalam RFC 2104 untuk menghitung tanda tangan. Dalam metode ini, AccessKeySecret digunakan sebagai kunci.

  • Header Accept, Content-Type, dan Content-MD5 bersifat opsional dalam permintaan. Jika header ini kosong dalam permintaan, gantilah dengan baris baru (\n) saat menghitung tanda tangan.

  • Di antara semua header HTTP non-standar, hanya header dengan awalan x-acs- yang perlu ditambahkan ke string-to-sign. Header HTTP non-standar lainnya diabaikan.

  • Header dengan awalan x-acs- dalam string-to-sign harus mematuhi konvensi berikut:

  • Nama header dalam huruf kecil.

  • Header diurutkan secara alfabetis.

  • Tidak ada spasi sebelum atau sesudah tanda titik dua (:) yang memisahkan setiap nama header dan nilainya.

  • Setiap header diikuti oleh baris baru (\n). Jika permintaan tidak berisi header dengan awalan x-acs-, tentukan string CanonicalizedHeaders sebagai string kosong tanpa pemisah \n di akhir.

2.5 Pemecahan Masalah

  • Jika Anda menentukan header Accept, verifikasi bahwa nilainya adalah application/json. Jika tidak, kesalahan 400 Bad Request akan dikembalikan. Kode kesalahan adalah InvalidHeader.

  • Verifikasi bahwa panjang badan tidak melebihi 4 MB. Jika panjang badan melebihi 4 MB, kesalahan 400 Bad Request akan dikembalikan. Kode kesalahan adalah InvaliField.

  • Jika format header Authorization tidak valid, kesalahan 400 Bad Request akan dikembalikan. Kode kesalahan adalah InvaliField.

  • Jika ID AccessKey dimulai dengan STS, verifikasi bahwa header x-acs-security-token telah diatur. Jika tidak, kesalahan 403 Forbidden akan dikembalikan. Kode kesalahan adalah InvalidHeader.

  • Jika AccessKey ID tidak ada atau berada dalam keadaan Dinonaktifkan, kesalahan 403 Forbidden akan dikembalikan. Kode kesalahan adalah InvalidParameter.

  • Jika AccessKey ID berada dalam keadaan Diaktifkan, tetapi PDS mendeteksi bahwa tanda tangan untuk permintaan tidak valid, kesalahan 403 Forbidden akan dikembalikan. Kode kesalahan adalah SignatureDoesNotMatch. String-to-sign yang digunakan untuk memverifikasi tanda tangan juga dikembalikan dalam response. Anda dapat memeriksa apakah string tanda tangan benar berdasarkan respons tersebut.

3. Kontrol Izin

Server API PDS menggunakan Manajemen Akses Sumber Daya (RAM) Alibaba Cloud untuk memverifikasi izin. Anda dapat mengonfigurasi kebijakan izin untuk pasangan AccessKey pengguna RAM yang Anda gunakan di Konsol RAM.

Tabel berikut menjelaskan tindakan dan sumber daya yang diverifikasi untuk setiap operasi API.

Operasi

Tindakan

Sumber Daya

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/$driveidatau 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:*