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:
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.
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.
Periksa apakah nilai bidang
StringToSigndalam badan respons konsisten dengan yang ada di permintaan.Bidang
StringToSignmenentukan 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: mymetaString 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