All Products
Search
Document Center

:Tanda tangan permintaan

Last Updated:Nov 09, 2025

Anda harus menandatangani semua permintaan API untuk memastikan keamanan. Alibaba Cloud menggunakan tanda tangan permintaan untuk memverifikasi identitas pemanggil API. Jika Anda menggunakan HTTPS untuk mengirim permintaan API, Anda harus menyertakan tanda tangan dalam permintaan tersebut.

Ikhtisar tanda tangan

Anda harus menambahkan tanda tangan ke permintaan API Key Management Service dalam format berikut:

https://Endpoint/?SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D
Tanda tangan mencakup parameter berikut:
  • SignatureMethod: Metode enkripsi dari string tanda tangan. Atur nilainya menjadi HMAC-SHA1.
  • SignatureVersion: Versi algoritma enkripsi tanda tangan. Atur nilainya menjadi 1.0.
  • Signature: String tanda tangan yang dihasilkan setelah permintaan dienkripsi secara simetris menggunakan Rahasia AccessKey.
Algoritma HMAC-SHA1 yang ditentukan dalam RFC 2104 digunakan untuk enkripsi. Rahasia AccessKey digunakan untuk menghitung nilai kode autentikasi pesan berbasis hash (HMAC) dari string kueri yang dikodekan dan diurutkan, dan nilai HMAC digunakan sebagai string tanda tangan. Tanda tangan permintaan mencakup parameter operasi tertentu. Oleh karena itu, tanda tangan permintaan bervariasi berdasarkan parameter permintaan. Untuk menghitung tanda tangan, ikuti langkah-langkah dalam topik ini.
Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )

Langkah 1: Buat dan kodekan string-to-sign

  1. Buat string kueri kanonis dengan mengatur parameter permintaan.
    1. Atur parameter permintaan (termasuk semua parameter umum dan spesifik operasi kecuali Signature) dalam urutan abjad.
      Catatan Saat menggunakan metode GET untuk mengirim permintaan, parameter ini merupakan bagian dari bidang parameter URL permintaan. Parameter ini ditempatkan setelah tanda tanya (?) dalam URI permintaan dan dihubungkan oleh ampersand (&).
    2. Kodekan nama dan nilai parameter permintaan yang telah diatur dalam URL permintaan menggunakan set karakter UTF-8. Tabel berikut menjelaskan aturan pengkodean.
      KarakterAturan pengkodean
      Huruf besar, huruf kecil, angka, tanda hubung (-), garis bawah (_), titik (.), dan tilde (~)Karakter-karakter ini tidak perlu dikodekan.
      Karakter lainnyaKarakter-karakter ini harus dikodekan persen dalam format %XY. XY merepresentasikan kode ASCII dari karakter dalam notasi heksadesimal. Sebagai contoh, tanda kutip ganda (") dikodekan sebagai %22.
      Karakter UTF-8 yang diperluasKarakter-karakter ini harus dikodekan dalam format %XY%ZA….
      SpasiSpasi harus dikodekan sebagai %20. Jangan mengkodekan spasi sebagai tanda tambah (+).
      Metode pengkodean ini berbeda dari algoritma pengkodean Multipurpose Internet Mail Extensions (MIME) application/x-www-form-urlencoded, seperti kelas java.net.URLEncoder yang disediakan oleh pustaka standar Java. Namun, Anda dapat menerapkan algoritma pengkodean MIME dan kemudian mengganti tanda tambah (+) dalam string yang telah dikodekan dengan %20, tanda bintang (*) dengan %2A, dan %7E dengan tilde (~). Anda dapat menggunakan metode percentEncode berikut untuk mengimplementasikan algoritma:
      private static final String ENCODING = "UTF-8";
      private static String percentEncode(String value) throws UnsupportedEncodingException 
      {
      return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
      }
    3. Hubungkan nama parameter dan nilai yang telah dikodekan menggunakan tanda sama dengan (=).
    4. Urutkan pasangan nama parameter dan nilai yang terhubung dalam urutan yang ditentukan dan hubungkan pasangan tersebut menggunakan ampersand (&) untuk mendapatkan string kueri kanonis.
  2. Buat string-to-sign dari string kueri kanonis yang telah dikodekan dengan cara berikut:
    StringToSign=
          HTTPMethod + "&" +
          percentEncode("/") + "&" +
          percentEncode(CanonicalizedQueryString)

    Daftar berikut menjelaskan parameter:

    • HTTPMethod: Menentukan metode HTTP yang digunakan untuk mengirim permintaan, seperti GET.
    • percentEncode("/"): Menentukan nilai yang telah dikodekan (%2F) dari garis miring maju (/). Pengkodean mengikuti aturan pengkodean URL.
    • percentEncode(CanonicalizedQueryString): Menentukan string kueri kanonis yang telah dikodekan berdasarkan aturan pengkodean URL.

Langkah 2: Hitung string tanda tangan

  1. Hitung nilai HMAC dari string-to-sign berdasarkan RFC 2104.
    Catatan Gunakan algoritma SHA1 untuk menghitung nilai HMAC dari string-to-sign. Kombinasi Rahasia AccessKey Anda dan ampersand (&) (kode ASCII 38) digunakan sebagai kunci untuk perhitungan HMAC.
  2. Kodekan nilai HMAC dalam Base64 untuk mendapatkan string tanda tangan.
  3. Tambahkan string tanda tangan ke permintaan sebagai parameter Signature.
    Catatan Saat nilai tanda tangan yang diperoleh diserahkan sebagai nilai parameter permintaan akhir, nilai tersebut harus dikodekan URL seperti parameter lainnya berdasarkan aturan yang didefinisikan dalam RFC 3986.

Contoh

Operasi CreateKey digunakan sebagai contoh untuk memperkenalkan metode penandatanganan.

URL permintaan sebelum permintaan ditandatangani:

https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z           

StringToSign untuk URL permintaan:

GET&%2F&AccessKeyId%3Dtestid%26Action%3DCreateKey%26Format%3Djson%26SignatureMethod%3DHMAC-SHA1%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-28T03%253A13%253A08Z%26Version%3D2016-01-20

Jika ID AccessKey adalah testid dan Rahasia AccessKey adalah testsecret, kunci yang digunakan untuk menghitung nilai HMAC dari string-to-sign adalah testsecret&.

Nilai tanda tangannya adalah 41wk2SSX1GJh7fwnc5eqOfiJPF****.

URL permintaan setelah permintaan ditandatangani:

https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
&Signature=41wk2SSX1GJh7fwnc5eqOfiJPF****