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 |
| 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 menjadiapplication/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, lihatContent-MD5dalam 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 awalanx-acs-, diurutkan secara alfabetis.CanonicalizedResource: Sumber daya PDS yang ingin diakses. HeaderDatedan stringCanonicalizedResourcewajib. 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:
Ubah nama semua header HTTP dengan awalan
x-acs-menjadi huruf kecil. Contoh: UbahX-ACS-Meta-Name: TaoBaomenjadix-acs-meta-name: TaoBao.Jika permintaan dikirim menggunakan pasangan AccessKey yang disediakan oleh Security Token Service (STS), tambahkan nilai
security-tokenke string CanonicalizedHeaders dalam formatx-acs-security-token:security-token.Urutkan semua header HTTP yang diperoleh pada langkah sebelumnya secara alfabetis.
Hapus semua spasi di setiap sisi pemisah antara setiap header dan nilainya. Contoh: Ubah
x-acs-meta-name: TaoBaomenjadix-acs-meta-name:TaoBao.Pisahkan setiap dua pasang header dan nilainya dengan pemisah
\nuntuk mendapatkan stringCanonicalizedHeaders.
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:
Atur string
CanonicalizedResourcemenjadi string kosong "".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
AccessKeySecretuntuk menghitung tanda tangan.Gunakan metode
HMAC-SHA1yang didefinisikan dalam RFC 2104 untuk menghitung tanda tangan. Dalam metode ini,AccessKeySecretdigunakan sebagai kunci.Header
Accept,Content-Type, danContent-MD5bersifat 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 stringCanonicalizedHeaderssebagai string kosong tanpa pemisah \n di akhir.
2.5 Pemecahan Masalah
Jika Anda menentukan header
Accept, verifikasi bahwa nilainya adalahapplication/json. Jika tidak, kesalahan400 Bad Requestakan dikembalikan. Kode kesalahan adalahInvalidHeader.Verifikasi bahwa panjang badan tidak melebihi 4 MB. Jika panjang badan melebihi 4 MB, kesalahan
400 Bad Requestakan dikembalikan. Kode kesalahan adalahInvaliField.Jika format header
Authorizationtidak valid, kesalahan400 Bad Requestakan dikembalikan. Kode kesalahan adalahInvaliField.Jika ID AccessKey dimulai dengan STS, verifikasi bahwa header
x-acs-security-tokentelah diatur. Jika tidak, kesalahan403 Forbiddenakan dikembalikan. Kode kesalahan adalahInvalidHeader.Jika
AccessKey IDtidak ada atau berada dalam keadaan Dinonaktifkan, kesalahan403 Forbiddenakan dikembalikan. Kode kesalahan adalahInvalidParameter.Jika
AccessKey IDberada dalam keadaan Diaktifkan, tetapi PDS mendeteksi bahwa tanda tangan untuk permintaan tidak valid, kesalahan403 Forbiddenakan dikembalikan. Kode kesalahan adalahSignatureDoesNotMatch. String-to-sign yang digunakan untuk memverifikasi tanda tangan juga dikembalikan dalamresponse. 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 |
|
ListStoreFiles(/v2/storefile/list) | pds:ListStoreFiles |
|
CreateDrive(/v2/drive/create) | pds:CreateDrive |
|
ListDrives(/v2/drive/list) | pds:ListDrives |
|
GetDrive(/v2/drive/get) | pds:GetDrive |
|
UpdateDrive(/v2/drive/update) | pds:UpdateDrive |
|
DeleteDrive(/v2/drive/delete) | pds:DeleteDrive |
|
ListMyDrives(/v2/drive/list_my_drives) | pds:ListMyDrives |
|
ListMyShares(/v2/drive/list_my_shares) | pds:ListMyShares |
|
CreateUser(/v2/user/create) | pds:CreateUser |
|
GetUser(/v2/user/get) | pds:GetUser |
|
ListUsers(/v2/user/list) | pds:ListUser |
|
UpdateUser(/v2/user/update) | pds:UpdateUser |
|
DeleteUser(/v2/user/delete) | pds:DeleteUser |
|
SearchUser(/v2/user/search) | pds:SearchUser |
|
GetUserAccessToken(/v2/user/get_access_token) | pds:GetUserAccessToken |
|
CreateShare(/v2/share/create) | pds:CreateShare |
|
GetShare(/v2/share/get) | pds:GetShare |
|
ListShares(/v2/share/list) | pds:ListShares |
|
UpdateShare(/v2/share/update) | pds:UpdateShare |
|
CreateFile(/v2/file/create) | pds:CreateFile |
|
CreateFileWithSignature(/v2/file/create_with_signature) | pds:CreateFile |
|
ListFiles(/v2/file/list) | pds:ListFiles |
|
CompleteFile(/v2/file/complete) | pds:CreateFile |
|
CompleteFileWithStoreInfo(/v2/file/complete_with_store_info) | pds:CreateFile |
|
GetFileSignature(/v2/file/get_signature) | pds:GetFileSignature |
|
GetFileUploadUrl(/v2/file/get_upload_url) | pds:CreateFile |
|
GetFileDownloadUrl(/v2/file/get_download_url) | pds:GetFile |
|
DeleteFile(/v2/file/delete) | pds:DeleteFile |
|
CopyFile(/v2/file/copy) | pds:CopyFile |
|
MoveFile(/v2/file/move) | pds:MoveFile |
|
UpdateFile(/v2/file/update) | pds:UpdateFile |
|
GetFile(/v2/file/get) | pds:GetFile |
|
DownloadFile(/v2/file/get) | pds:GetFile |
|
BatchDeleteFile(/v2/file/batch_delete) | pds:DeleteFile |
|
GetAsyncTask(/v2/async_task/get) | pds:GetAsyncTask |
|
ListImageTags(/v2/image/list_tags) | pds:ListImageTags |
|
ListImageFaceGroups(/v2/image/list_facegroups) | pds:ListImageFaceGroups |
|
ListFaceGroupImages(/v2/image/list_facegroup_images) | pds:ListFaceGroupImages |
|
Batch(/v2/batch) | pds:Batch |
|