全部产品
Search
文档中心

Object Storage Service:Memecahkan masalah kesalahan tanda tangan

更新时间:Jul 02, 2025

Topik ini menjelaskan cara memecahkan masalah kesalahan tanda tangan Object Storage Service (OSS).

Pesan kesalahan

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>SignatureDoesNotMatch</Code>
  <Message>Tanda tangan permintaan yang kami hitung tidak sesuai dengan tanda tangan yang Anda berikan. Periksa kunci dan metode penandatanganan Anda.</Message>
  <RequestId>646DCB189AE2D1333018****</RequestId>
  <HostId>bucket.oss-cn-hangzhou.aliyuncs.com</HostId>
  <OSSAccessKeyId>LTAI****************</OSSAccessKeyId>
  <SignatureProvided>tPN3LTAI******** </SignatureProvided>
  <StringToSign>PUT\n\n\nTue, 23 May 2023 15:24:55 GMT\n/bucket/?acl</StringToSign>
  <StringToSignBytes>50 55 54 0A 0A 0A 54 75 65 2C 20 32 33 20 4D 61 79 20 32 30 32 33 20 31 35 3A 32 34 3A 35 35 20 47 4D 54 0A 2F 64 69 6E 61 72 79 2F 3F 61 63 6C </StringToSignBytes>
  <EC>0002-00000040</EC>
</Error>

Saat Anda memanggil operasi API atau menggunakan OSS SDK untuk mengakses OSS, klien harus menyertakan tanda tangan agar server OSS dapat melakukan autentikasi identitas. Jika server mengembalikan pesan kesalahan di atas, tanda tangan yang Anda berikan dalam permintaan tidak sesuai dengan tanda tangan yang dihitung oleh server, sehingga permintaan ditolak.

Pemecahan masalah

Jika terjadi kesalahan tanda tangan dalam permintaan Anda, ikuti langkah-langkah berikut untuk memecahkan masalah tersebut:

  1. Periksa apakah ID AccessKey dan Rahasia AccessKey valid.

    Anda dapat menggunakan ID AccessKey dan Rahasia AccessKey untuk masuk ke ossbrowser guna memeriksa validitasnya. Untuk informasi lebih lanjut, lihat Instal ossbrowser 1.0.

  2. Periksa apakah algoritma tanda tangan valid.

    OSS menyediakan dua metode permintaan yang dapat menyertakan tanda tangan. Untuk informasi lebih lanjut, lihat Sertakan tanda tangan di header Authorization dan Tambahkan tanda tangan ke URL. Berikut adalah algoritma untuk kedua metode tanda tangan:

    • Sertakan tanda tangan di header Authorization

      StringToSign = VERB + "\n"
                    + Content-MD5 + "\n" 
                    + Content-Type + "\n" 
                    + Date + "\n" 
                    + CanonicalizedOSSHeaders
                    + CanonicalizedResource
      Signature = base64(hmac-sha1(AccessKeySecret, StringToSign)
    • Tambahkan tanda tangan ke URL

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

    Kami menyarankan Anda menggunakan OSS SDK untuk mengakses OSS karena menghilangkan kebutuhan untuk menghitung tanda tangan secara manual. Untuk informasi lebih lanjut, lihat Ikhtisar.

  3. Periksa apakah nilai bidang StringToSign dalam badan respons konsisten dengan yang ada di permintaan.

    Bidang StringToSign menentukan string yang akan ditandatangani, yaitu konten yang perlu dienkripsi menggunakan Rahasia AccessKey dalam algoritma tanda tangan.

    Contoh:

    PUT /bucket/abc?acl
    Date: Wed, 24 May 2023 02:12:30 GMT
    Authorization: OSS qn6q**************:77Dv****************
    x-oss-abc: mymeta

    String yang akan ditandatangani dihitung menggunakan metode di atas:

    PUT\n\n\nWed, 24 May 2023 02:12:30 GMT\nx-oss-abc:mymeta\n/bucket/abc?acl