全部产品
Search
文档中心

Object Storage Service:Sertakan tanda tangan V1 dalam URL

更新时间:Dec 12, 2025

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.

Penting

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

OSSV1Signer.java

Java

PHP

SignerV1.php

PHP

Node.js

signatureUrl.js

Node.js

Browser.js

Browser.js

Python

auth.py

Python

Android

ObjectURLPresigner.java

Android

iOS

OSSClient.m

iOS

Go

v1.go

Go

C++

SignerV1.cc

C++

C

oss_auth.c

C

.Net

OssClient.cs

.NET

Ruby

bucket.rb

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-token dalam 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=32
  • Tabel 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.

    Catatan

    Untuk 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, dan CanonicalizedOSSHeaders sama 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.

    Catatan

    Untuk 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.

    Penting
    • Parameter 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 nilai X-Forwarded-For untuk verifikasi tanda tangan.

    Nilai valid:

    • true

      Penting

      Jika 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.