Selain menggunakan header otorisasi HTTP untuk menyediakan informasi autentikasi, Anda dapat menggunakan parameter string kueri untuk mengautentikasi permintaan saat ingin mengekspresikan seluruh permintaan dalam URL. Dengan cara ini, Anda dapat memberikan pengguna akses sementara ke sumber daya Object Storage Service (OSS) tertentu tanpa mengekspos kredensial akses Anda. Topik ini menjelaskan cara menyertakan tanda tangan V1 dalam URL.
Kami merekomendasikan agar Anda menggunakan algoritma tanda tangan V4, yang menawarkan keamanan lebih baik. Untuk informasi lebih lanjut, lihat Sertakan tanda tangan V4 dalam URL (direkomendasikan).
Gunakan SDK OSS untuk mengimplementasikan tanda tangan V1 secara otomatis
SDK OSS mendukung implementasi otomatis tanda tangan V1. Saat menggunakan SDK OSS, Anda tidak perlu menambahkan tanda tangan ke permintaan secara manual. Untuk informasi lebih lanjut tentang implementasi tanda tangan pada bahasa pemrograman tertentu, lihat kode contoh dari SDK OSS untuk bahasa tersebut. Tabel berikut menyediakan referensi ke kode contoh yang digunakan untuk menandatangani permintaan dengan algoritma tanda tangan V1 saat menggunakan SDK OSS untuk berbagai bahasa pemrograman.
SDK | Kode contoh | Contoh |
Java | ||
PHP | ||
Node.js | ||
Browser.js | ||
Python | ||
Android | ||
iOS | ||
Go | ||
C++ | ||
C | ||
.Net | ||
Ruby |
Catatan penggunaan
Jika Anda menggunakan URL bertanda tangan untuk berbagi data, data tersebut dapat diakses oleh semua pengguna Internet yang memiliki URL tersebut selama periode validitasnya. Kami merekomendasikan agar Anda menilai risiko terlebih dahulu sebelum membagikan data.
OSS tidak mengizinkan Anda memuat tanda tangan dalam URL sumber daya tertentu dan dalam header Otorisasi permintaan untuk sumber daya tersebut secara bersamaan.
Anda dapat menghasilkan URL bertanda tangan untuk permintaan PUT guna memverifikasi apakah konten yang ingin Anda unggah valid. Jika Anda menggunakan SDK OSS untuk menghasilkan URL bertanda tangan untuk permintaan, SDK OSS akan menghitung hash MD5 dari badan permintaan dan menyertakan hash MD5 dalam URL bertanda tangan. Hash MD5 dari konten yang diunggah harus sesuai dengan hash MD5 yang dihitung oleh SDK OSS. Jika tidak, permintaan PUT akan gagal. Untuk memverifikasi hash MD5 dari konten yang diunggah, tambahkan header Content-MD5 ke permintaan.
Metode implementasi
Contoh
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****Jika Anda ingin menggunakan kredensial akses sementara yang diperoleh dari Security Token Service (STS) untuk menghasilkan URL bertanda tangan, Anda harus menyertakan parameter
security-tokendalam URL.https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****&security-token=CAIS****q6Ft5B2yfSjIr****Oz31blR9oWmWBf****DR/xm3Imc****IHxMdHJsCeAcs/Q0lGFR5/sflqJIR****EvCUcZr8szfWcsZos2****u5Jko1be0ewHKeQKZsebWZ+LmNpy/Ht6md1HDkAJq3LL+bk/Mdle5MJqP+/kFC9MMRVuAcCZhDtVbLRcYgq18D3bKMuu3ORPHm3fZCFES2jBxkmRi86+ysIP+phPVlw/90fRH5dazcJW0Zsx0OJo6Wcq+3+FqM6DQlTNM6hwNtoUO1fYUommb54nDXwQIvUjfbtC5qIM/cFVLAYEhAL****TGkvl1h/fejYyfyW****kFCHiPF****JCUSbr4a4sjF6zyPnPWycyCLYXleLzhxPWd/2kagAGaXG69BqwYNvrKKI3W8****bNc1wQDMXQfiHpFCRG6lYhh3****pwH90A3sTlxzRGvi8+****JwrluOHWs+Fj6S6s0cOhKvKRWYE8UuWeXIvv4l6DAGwH****LjLC11f5prUJ****b+3hwuBod32Jx+us/1p996Glao725orcb****Anda dapat menambahkan alamat IP, blok CIDR, atau ID virtual private cloud (VPC) ke URL bertanda tangan untuk mencegah terminal yang tidak berwenang mengakses sumber daya OSS yang dibagikan.
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?&OSSAccessKeyId=44CF****************&Expires=1475462111&Signature=77Dv****************&x-oss-ac-subnet-mask=32Tabel berikut menjelaskan parameter dalam URL sebelumnya.
Parameter
Tipe
Diperlukan
Deskripsi
OSSAccessKeyId
String
Ya
ID AccessKey yang digunakan dalam URL bertanda tangan.
Expires
Numerik
Ya
Waktu kedaluwarsa URL bertanda tangan. Timestamp mengikuti format waktu UNIX. Ini adalah jumlah detik yang telah berlalu sejak pukul 00:00:00 Kamis, 1 Januari 1970. Jika waktu OSS menerima permintaan yang berisi URL lebih lambat dari nilai parameter ini, kesalahan timeout permintaan dikembalikan. Misalnya, jika waktu saat ini adalah 1141889060 dan Anda ingin membuat URL yang valid selama 60 detik, Anda harus menetapkan parameter ini menjadi 1141889120.
CatatanUntuk alasan keamanan, periode validitas default URL yang dihasilkan di konsol OSS adalah 3.600 detik dan periode validitas maksimum adalah 32.400 detik. Untuk informasi lebih lanjut tentang cara memodifikasi periode validitas URL, lihat Gunakan URL objek.
Signature
String
Ya
Informasi tanda tangan yang ingin Anda tambahkan ke URL. Anda harus menyediakan informasi tanda tangan dalam format berikut:
Signature = urlencode(base64(hmac-sha1(AccessKeySecret, VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + EXPIRES + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource)))Di OSS, algoritma yang digunakan untuk menghitung tanda tangan yang ditambahkan ke URL serupa dengan yang digunakan untuk menghitung tanda tangan yang ditambahkan ke header Otorisasi permintaan.
Saat Anda menghitung string tanda tangan yang akan ditambahkan ke URL, header yang didefinisikan dalam tanda tangan V1 seperti
CONTENT-TYPE,CONTENT-MD5, danCanonicalizedOSSHeaderssama dengan yang digunakan untuk menghitung tanda tangan yang Anda tambahkan ke header Otorisasi. Namun, Anda harus mengganti header Date dengan Expire dalam string tanda tangan. Anda dapat menyertakan header Date dalam permintaan, tetapi tidak perlu menyertakannya dalam string tanda tangan.Anda harus mengkodekan URL saat Anda menambahkan tanda tangan ke URL. Jika Anda menentukan nilai untuk Signature, Expires, atau OSSAccessKeyId beberapa kali, nilai pertama yang digunakan.
Jika Anda menggunakan URL bertanda tangan untuk meminta sumber daya, OSS pertama-tama memeriksa apakah waktu permintaan diterima lebih lambat dari nilai Expires, lalu memverifikasi tanda tangan.
security-token
String
Tidak
Token keamanan yang diperoleh dari STS. Anda hanya perlu mengonfigurasi parameter ini jika Anda menggunakan kredensial akses sementara untuk menandatangani URL.
CatatanUntuk informasi lebih lanjut tentang cara mengonfigurasi STS, lihat Gunakan kredensial akses sementara yang disediakan oleh STS untuk mengakses OSS. Anda dapat memanggil operasi AssumeRole atau menggunakan SDK STS untuk berbagai bahasa pemrograman untuk mendapatkan kredensial akses sementara. Kredensial akses sementara berisi token keamanan dan pasangan AccessKey sementara. Pasangan AccessKey terdiri dari ID AccessKey dan rahasia AccessKey.
x-oss-ac-source-ip
String
Tidak
Alamat IP atau blok CIDR.
PentingParameter ini hanya digunakan saat tanda tangan dihasilkan. Anda tidak perlu menyertakan parameter ini dalam URL.
Parameter ini harus digunakan bersama dengan x-oss-ac-subnet-mask yang menentukan subnet mask.
x-oss-ac-subnet-mask
Numerik
Tidak
Jumlah digit 1 dalam subnet mask. Jika parameter ini disertakan dalam URL bertanda tangan, OSS melakukan operasi AND berdasarkan alamat IP dari mana permintaan dikirim dan subnet mask. Hasil operasi digunakan untuk memverifikasi tanda tangan URL. Jika parameter ini dirusak, verifikasi tanda tangan gagal.
x-oss-ac-vpc-id
String
Tidak
ID VPC. Parameter ini digunakan untuk menentukan apakah permintaan dikirim melalui VPC tertentu. Jika permintaan dikirim melalui VPC tertentu, OSS memverifikasi ID VPC dan alamat IP atau blok CIDR dari mana permintaan dikirim.
x-oss-ac-forward-allow
Boolean
Tidak
Menentukan apakah akan mengizinkan pengalihan permintaan. Jika OSS mendeteksi bidang ini dan permintaan berisi
X-Forwarded-For(mungkin dengan beberapa alamat IP), OSS menggunakan nilaiX-Forwarded-Foruntuk verifikasi tanda tangan.Nilai valid:
true
PentingJika Anda menetapkan parameter ini ke true, header permintaan mungkin dirusak.
false (default)
Kode contoh Python untuk penandatanganan (hanya termasuk parameter yang diperlukan)
import base64 import hmac import hashlib from urllib.parse import quote access_key_secret = "yourAccessKeySecret" string_to_sign = "GET\n\n\n1141889120\n/examplebucket/oss-api.pdf" h = hmac.new( access_key_secret.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1 ) signature = quote(base64.b64encode(h.digest()).decode('utf-8')) print(signature)
Kode kesalahan
Kode kesalahan | Pesan kesalahan | Deskripsi |
AccessDenied | 403 Forbidden | Parameter Signature, Expires, dan OSSAccessKeyId diperlukan. Parameter-parameter tersebut tidak harus mengikuti urutan tertentu. |
AccessDenied | 403 Forbidden | Waktu akses permintaan lebih lambat dari nilai parameter Expires yang ditentukan dalam permintaan, atau format waktu permintaan tidak valid. |
InvalidArgument | 400 Bad Request | Setidaknya satu dari parameter Signature, Expires, dan OSSAccessKeyId disertakan dalam URL, dan informasi tanda tangan juga disertakan dalam header permintaan Authorization. |