全部产品
Search
文档中心

Object Storage Service:Tanda tangan V1 dalam permintaan PostObject

更新时间:Jul 02, 2025

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.

Penting

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
    • Jika daftar kontrol akses (ACL) bucket bersifat public-read atau private, Anda harus menyediakan elemen OSSAccessKeyId.

    • Jika elemen Signature dan bidang formulir kebijakan ada, Anda harus menyediakan elemen OSSAccessKeyId.

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
  • Jika ACL bucket bersifat public-read atau private, Anda harus menyediakan elemen Signature.

  • Jika elemen OSSAccessKeyId dan bidang formulir kebijakan ada, Anda harus menyediakan elemen Signature.

  • Kunci elemen tidak peka huruf besar/kecil, tetapi nilai bidang formulir peka huruf besar/kecil.

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.

Penting

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.000Z menunjukkan 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

Mode pencocokan kondisi

Mode pencocokan

Deskripsi

content-length-range

Ukuran objek yang ingin Anda unggah harus berada dalam rentang ukuran objek yang didukung. Sebagai contoh, jika ukuran objek yang didukung adalah 1 hingga 10 byte, kondisi harus ["content-length-range", 1, 10].

eq

Nilai bidang formulir harus persis sama dengan nilai yang ditentukan dalam kondisi. Sebagai contoh, jika nilai bidang formulir key harus a, Anda dapat menentukan ["eq", "$key", "a"] sebagai kondisi.

starts-with

Nilai bidang formulir harus dimulai dengan awalan tertentu. Sebagai contoh, jika nilai bidang formulir key dimulai dengan user/user1, Anda dapat menentukan ["starts-with", "$key", "user/user1"] sebagai kondisi.

in

Elemen yang ingin Anda sertakan dalam verifikasi. Elemen-elemen tersebut harus ditentukan dalam string kondisi. Sebagai contoh, jika Anda ingin memverifikasi apakah tipe objek yang ingin Anda unggah adalah gambar dan ingin mengizinkan pengunggahan gambar dalam beberapa format dalam permintaan PostObject, kondisi harus ["in", "$content-type", ["image/jpg", "image/png"]].

not-in

Elemen yang ingin Anda kecualikan dari verifikasi. Elemen-elemen tersebut harus ditentukan dalam string kondisi. Sebagai contoh, jika Anda ingin menentukan perilaku caching objek dan mengecualikan elemen no-cache, kondisi harus ["not-in", "$cache-control", ["no-cache"]].

Karakter escape untuk bidang formulir kebijakan

Dalam bidang formulir kebijakan permintaan PostObject, tanda dolar ($) menunjukkan variabel. Untuk mendeskripsikan tanda dolar ($), gunakan karakter escape berikut: \$. Tabel berikut menjelaskan karakter escape yang digunakan dalam string JSON bidang formulir kebijakan dalam permintaan PostObject.

Karakter escape

Deskripsi

\/

Garis miring depan

\\

Garis miring belakang

\"

Tanda kutip ganda

\$

Tanda dolar

\b

Spasi

\f

Pemisah form feed

\n

Pemisah baris baru

\r

Pemisah carriage return

\t

Pemisah tab horizontal

\uxxxx

Karakter Unicode

Proses perhitungan tanda tangan

  1. Buat kebijakan yang dikodekan UTF-8.

  2. Buat string untuk ditandatangani.

    Base64-encode kebijakan untuk menghasilkan string yang dapat ditransmisikan secara aman sebagai string untuk ditandatangani.

  3. 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=