Untuk memastikan keamanan permintaan PostObject, Anda harus menyertakan tanda tangan dalam permintaan tersebut. Tanda tangan V1 dihitung dengan mengenkripsi serangkaian parameter permintaan, termasuk kebijakan dan masa berlaku, menggunakan Rahasia AccessKey. Setelah server aplikasi menghasilkan tanda tangan, informasi seperti tanda tangan dan kebijakan unggah dikembalikan ke klien. Klien kemudian menggunakan informasi ini untuk membuat permintaan unggah. Setelah Object Storage Service (OSS) menerima permintaan unggah, OSS memverifikasi validitas tanda tangan. Hanya permintaan dengan tanda tangan yang valid yang diizinkan, sementara permintaan yang gagal verifikasi akan ditolak.
Kami merekomendasikan penggunaan algoritma tanda tangan V4, yang menawarkan keamanan lebih baik. Untuk informasi lebih lanjut, lihat (Direkomendasikan) Sertakan tanda tangan V4 dalam permintaan PostObject.
Tanda tangan dalam permintaan PostObject
Permintaan PostObject mendukung algoritma tanda tangan V1. Elemen formulir dan bidang formulir kebijakan memainkan peran penting dalam memastikan legitimasi dan keamanan permintaan PostObject.
Elemen formulir
Formulir adalah kumpulan bidang yang terdapat dalam permintaan PostObject untuk menyampaikan informasi tentang objek yang ingin diunggah beserta metadata-nya. Tabel berikut menjelaskan elemen formulir unik dari tanda tangan V1 dalam permintaan PostObject. Untuk informasi lebih lanjut tentang elemen formulir umum, lihat Elemen formulir.
Elemen | Tipe | Deskripsi |
OSSAccessKeyId | String | ID AccessKey dari pasangan AccessKey. Secara default, elemen ini dibiarkan kosong.
Penting |
Signature | String | Tanda tangan yang dihitung berdasarkan Rahasia AccessKey dan kebijakan. OSS menggunakan tanda tangan untuk memverifikasi validitas permintaan PostObject. Untuk informasi lebih lanjut, lihat PostObject. Secara default, elemen ini dibiarkan kosong. Penting
|
policy
Bidang formulir kebijakan dalam permintaan PostObject digunakan untuk menentukan waktu kedaluwarsa dan kondisi permintaan PostObject yang diinisiasi untuk mengunggah objek menggunakan formulir HTML. Nilai bidang formulir kebijakan adalah string JSON yang membatasi permintaan PostObject dengan menentukan beberapa parameter, seperti nama bucket tempat objek akan diunggah, awalan dalam nama objek, periode validitas permintaan, metode HTTP yang diizinkan, serta ukuran dan konten objek.
Bidang formulir kebijakan harus mencakup parameter expiration dan conditions.
{
"expiration": "2023-12-03T13:00:00.000Z",
"conditions": [
{"bucket": "examplebucket"},
["content-length-range", 1, 10],
["eq", "$success_action_status", "201"],
["starts-with", "$key", "user/eric/"],
["in", "$content-type", ["image/jpg", "image/png"]],
["not-in", "$cache-control", ["no-cache"]]
]
}Parameter wajib dalam bidang formulir kebijakan:
expiration
Parameter expiration menentukan waktu kedaluwarsa permintaan. Waktu harus mengikuti standar ISO 8601 dan dalam GMT. Sebagai contoh,
2023-12-03T13:00:00.000Zmenunjukkan bahwa permintaan PostObject harus dikirim sebelum pukul 13:00 pada tanggal 3 Desember 2013.conditions
Parameter conditions adalah daftar yang menentukan nilai valid dari bidang formulir dalam permintaan PostObject.
Parameter
Tipe
Wajib
Deskripsi
Mode pencocokan
bucket
String
Tidak
Nama bucket.
bucket
content-length-range
String
Tidak
Ukuran minimum dan maksimum objek yang ingin Anda unggah. Unit: byte.
content-length-range
success_action_status
String
Tidak
Kode status HTTP yang dikembalikan setelah objek diunggah.
eq, starts-with, in, dan not-in
key
String
Tidak
Nama objek yang ingin Anda unggah.
eq, starts-with, in, dan not-in
content-type
String
Tidak
Tipe objek yang ingin Anda unggah.
eq, starts-with, in, dan not-in
cache-control
String
Tidak
Perilaku caching objek.
eq, starts-with, in, dan not-in
Proses perhitungan tanda tangan
Buat kebijakan yang dikodekan UTF-8.
Buat string untuk ditandatangani.
Base64-encode kebijakan untuk menghasilkan string yang dapat ditransmisikan secara aman sebagai string untuk ditandatangani.
Hitung tanda tangan.
Tandatangani string untuk ditandatangani menggunakan Rahasia AccessKey berdasarkan metode berikut:
Signature = base64(hmac-sha1(AccessKeySecret,base64(policy))).
Contoh
Kode sampel berikut menunjukkan cara menggunakan kebijakan di atas untuk menghitung tanda tangan V1 untuk permintaan PostObject menggunakan OSS SDK for Java:
import org.apache.commons.codec.binary.Base64;
public class Demo {
public static void main(String[] args) {
// Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
String accessKeySecret = System.getenv().get("OSS_ACCESS_KEY_SECRET");
// Langkah 1: Buat kebijakan.
String policy = "{\n" +
" \"expiration\": \"2023-12-03T13:00:00.000Z\",\n" +
" \"conditions\": [\n" +
" {\"bucket\": \"examplebucket\"},\n" +
" [\"content-length-range\", 1, 10],\n" +
" [\"eq\", \"$success_action_status\", \"201\"],\n" +
" [\"starts-with\", \"$key\", \"user/eric/\"],\n" +
" [\"in\", \"$content-type\", [\"image/jpg\", \"image/png\"]],\n" +
" [\"not-in\", \"$cache-control\", [\"no-cache\"]]\n" +
" ]\n" +
"}";
// Langkah 2: Buat string untuk ditandatangani.
String stringToSign = new String(Base64.encodeBase64(policy.getBytes()));
// Langkah 3: Hitung tanda tangan.
String signature = com.aliyun.oss.common.auth.ServiceSignature.create().computeSignature(accessKeySecret, stringToSign);
System.out.println("signature:" + signature);
}
}Contoh keluaran:
signature:hR2cJnoG9uzrZLDAmrfOtUjtkSM=