All Products
Search
Document Center

Object Storage Service:Sertakan signature V1 dalam URL

Last Updated:Mar 21, 2026

Alih-alih menyertakan informasi autentikasi dalam header Authorization, Anda dapat menyematkannya langsung ke dalam URL sebagai parameter string kueri. Pendekatan ini memungkinkan Anda berbagi tautan berbatas waktu ke resource Object Storage Service (OSS) tanpa mengekspos kredensial akses Anda.

Penting

Gunakan algoritma signature V4 untuk keamanan yang lebih baik. Lihat Sertakan signature V4 dalam URL (disarankan).

Gunakan SDK untuk menghasilkan URL yang ditandatangani

SDK OSS menangani penandatanganan V1 secara otomatis. Jika Anda menggunakan SDK, Anda tidak perlu membuat signature secara manual. Tabel berikut mencantumkan implementasi penandatanganan dan contoh penggunaannya untuk setiap bahasa yang didukung.

SDKImplementasi penandatangananContoh penggunaan
JavaOSSV1Signer.javaJava
PHPSignerV1.phpPHP
Node.jssignatureUrl.jsNode.js
Browser.jsBrowser.js
Pythonauth.pyPython
AndroidObjectURLPresigner.javaAndroid
iOSOSSClient.miOS
Gov1.goGo
C++SignerV1.ccC++
Coss_auth.cC
.NETOssClient.cs.NET
Rubybucket.rbRuby

Buat URL yang ditandatangani secara manual

Untuk membuat URL yang ditandatangani sendiri, Anda memerlukan:

  • ID AccessKey dan rahasia AccessKey, atau kredensial akses temporary dari Security Token Service (STS)

  • Nama bucket dan path objek dari resource target

  • Metode HTTP yang dimaksud (GET, PUT, dan sebagainya)

  • Waktu kedaluwarsa dalam bentuk Unix timestamp

Format URL

URL yang ditandatangani V1 memiliki struktur berikut:

https://<bucket>.oss-<region>.aliyuncs.com/<object>?OSSAccessKeyId=<key-id>&Expires=<unix-timestamp>&Signature=<encoded-signature>

Untuk menggunakan kredensial akses temporary dari STS, tambahkan parameter security-token:

https://<bucket>.oss-<region>.aliyuncs.com/<object>?OSSAccessKeyId=<key-id>&Expires=<unix-timestamp>&Signature=<encoded-signature>&security-token=<sts-token>

Untuk membatasi akses berdasarkan alamat IP atau virtual private cloud (VPC), sertakan parameter kontrol akses yang sesuai:

https://<bucket>.oss-<region>.aliyuncs.com/<object>?OSSAccessKeyId=<key-id>&Expires=<unix-timestamp>&Signature=<encoded-signature>&x-oss-ac-subnet-mask=32

Parameter URL

ParameterTipeWajibDeskripsi
OSSAccessKeyIdStringYaID AccessKey yang digunakan untuk menandatangani URL.
ExpiresNumerikYaWaktu kedaluwarsa dalam bentuk Unix timestamp (detik sejak 1970-01-01 00:00:00 UTC). OSS menolak permintaan yang diterima setelah waktu ini. Misalnya, jika waktu saat ini adalah 1141889060 dan Anda ingin URL berlaku selama 60 detik, atur nilai ini menjadi 1141889120. Periode validitas default di Konsol OSS adalah 3.600 detik dan maksimum 32.400 detik. Lihat Gunakan URL objek untuk mengubah periode validitas.
SignatureStringYaSignature HMAC-SHA1 yang telah di-encode Base64 lalu di-URL encode. Lihat Formula penandatanganan di bawah.
security-tokenStringTidakToken keamanan dari STS. Hanya diperlukan saat menggunakan kredensial akses temporary. Lihat Gunakan kredensial akses temporary yang disediakan oleh STS untuk mengakses OSS. Anda dapat memanggil operasi AssumeRole atau menggunakan SDK STS untuk berbagai bahasa pemrograman untuk mendapatkan kredensial akses temporary. Kredensial akses temporary berisi token keamanan dan pasangan AccessKey sementara (ID AccessKey + rahasia AccessKey).
x-oss-ac-source-ipStringTidakAlamat IP atau Blok CIDR. Hanya digunakan pada saat pembuatan signature — jangan sertakan dalam URL itu sendiri. Harus digunakan bersama dengan x-oss-ac-subnet-mask.
x-oss-ac-subnet-maskNumerikTidakPanjang subnet mask (jumlah bit 1 di awal). OSS melakukan operasi bitwise AND antara IP sumber permintaan dan mask ini untuk memverifikasi signature. Jika parameter ini dimodifikasi, verifikasi signature akan gagal.
x-oss-ac-vpc-idStringTidakID VPC. OSS memverifikasi bahwa permintaan berasal dari VPC yang ditentukan, serta memeriksa IP sumber atau Blok CIDR.
x-oss-ac-forward-allowBooleanTidakApakah akan menggunakan header X-Forwarded-For untuk verifikasi signature ketika permintaan diteruskan. Nilai yang valid: true, false (default). Mengatur nilai ini ke true membuka potensi manipulasi terhadap header permintaan.

Formula penandatanganan

Parameter Signature menggunakan algoritma yang sama dengan header Authorization, dengan satu perbedaan: ganti header Date dengan Expires dalam string yang akan ditandatangani. Anda tetap dapat menyertakan Date dalam permintaan, tetapi jangan sertakan dalam string signature.

Signature = urlencode(base64(hmac-sha1(AccessKeySecret,
              VERB + "\n"
              + CONTENT-MD5 + "\n"
              + CONTENT-TYPE + "\n"
              + EXPIRES + "\n"
              + CanonicalizedOSSHeaders
              + CanonicalizedResource)))

Untuk CONTENT-MD5, CONTENT-TYPE, dan CanonicalizedOSSHeaders, ikuti aturan yang sama seperti pada signature V1.

Jika Signature, Expires, atau OSSAccessKeyId muncul beberapa kali dalam URL, OSS menggunakan nilai pertama. Saat OSS menerima permintaan, OSS terlebih dahulu memeriksa Expires, lalu memverifikasi Signature.

Contoh Python

Contoh berikut menghitung signature V1 untuk permintaan GET hanya dengan menggunakan 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)

Ganti nilai placeholder berikut:

PlaceholderDeskripsi
yourAccessKeySecretRahasia AccessKey Anda
1141889120Unix timestamp kedaluwarsa
/examplebucket/oss-api.pdfCanonicalizedResource (/<bucket>/<object>)

Pertimbangan keamanan

Jika Anda menggunakan URL yang ditandatangani untuk berbagi data, data tersebut dapat diakses oleh semua pengguna Internet yang memiliki URL tersebut selama periode validitasnya. Kami menyarankan agar Anda mengevaluasi risiko terkait data terlebih dahulu.

Untuk mengurangi risiko akses tidak sah:

  • Batasi akses berdasarkan alamat IP atau VPC menggunakan x-oss-ac-source-ip, x-oss-ac-subnet-mask, dan x-oss-ac-vpc-id.

  • Jangan sertakan signature URL baik di URL maupun di header Authorization untuk permintaan yang sama — OSS akan menolak permintaan semacam itu.

Catatan penggunaan

  • Untuk permintaan PUT, SDK OSS menghitung hash MD5 dari badan permintaan dan menyertakannya dalam URL yang ditandatangani. Hash MD5 dari konten yang diunggah harus cocok; jika tidak, permintaan PUT akan gagal. Untuk memverifikasi hash MD5, sertakan header Content-MD5 dalam permintaan.

  • x-oss-ac-source-ip hanya digunakan saat pembuatan signature. Jangan sertakan parameter ini dalam URL yang Anda bagikan.

Pemecahan masalah

Mengapa saya mendapatkan error 403 AccessDenied?

Periksa penyebab umum berikut:

  • Salah satu atau lebih dari OSSAccessKeyId, Expires, atau Signature tidak ada dalam URL. Ketiganya wajib disertakan (urutan tidak penting).

  • Permintaan tiba setelah timestamp Expires, atau format timestamp tidak valid. Pastikan jam sistem Anda tersinkronisasi dan nilai Expires merupakan Unix timestamp yang valid di masa depan.

Mengapa saya mendapatkan error 400 InvalidArgument?

OSS tidak mengizinkan signature muncul baik di URL maupun di header Authorization untuk permintaan yang sama. Hapus signature dari salah satu lokasi tersebut.

Langkah selanjutnya