全部产品
Search
文档中心

ApsaraMQ for MQTT:Tanda tangan permintaan

更新时间:Jun 28, 2025

Anda harus menandatangani semua permintaan API untuk memastikan keamanan. Alibaba Cloud menggunakan tanda tangan permintaan untuk memverifikasi identitas pemanggil API. Oleh karena itu, setiap permintaan API harus mencakup informasi tanda tangan, baik dikirim melalui HTTP maupun HTTPS.

Ikhtisar

Anda harus menambahkan tanda tangan ke permintaan API Message Queue for Apache RocketMQ dalam format berikut:

https://Endpoint/?SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf
  • Endpoint: ApsaraMQ for MQTT alamat akses layanan [******] adalah onsmqtt.[regionId].aliyuncs.com.[regionId], lihat Endpoint.
  • SignatureMethod: Metode enkripsi string tanda tangan. Atur nilainya menjadi HMAC-SHA1.
  • SignatureVersion: Versi algoritma enkripsi tanda tangan. Atur nilainya menjadi 1.0.
  • SignatureNonce: Nomor acak unik yang digunakan untuk mencegah serangan replay. Gunakan nomor acak berbeda untuk setiap permintaan. Direkomendasikan menggunakan pengenal unik universal (UUID).
  • Signature: Tanda tangan yang dihasilkan setelah permintaan dienkripsi secara simetris menggunakan Rahasia AccessKey.
Algoritma enkripsi tanda tangan mengikuti spesifikasi RFC 2104 HMAC-SHA1. Rahasia AccessKey digunakan untuk menghitung nilai kode autentikasi pesan berbasis hash (HMAC) dari string kueri yang telah dienkripsi dan diurutkan, dengan nilai HMAC digunakan sebagai string tanda tangan. Tanda tangan permintaan mencakup parameter operasi tertentu, sehingga bervariasi tergantung pada parameter permintaan. Untuk menghitung string tanda tangan, ikuti langkah-langkah dalam topik ini.
Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(
StringToSign)) )

1 Susun dan enkode string-to-sign

  1. Buat string kueri kanonis dengan mengatur parameter permintaan.
    1. Atur parameter permintaan (termasuk semua parameter umum dan operasi tertentu, kecuali Signature) dalam urutan abjad.
      Catatan Saat menggunakan metode GET untuk mengirimkan permintaan, parameter ini membentuk bidang parameter URI permintaan. Mereka ditempatkan setelah tanda tanya (?) dalam URI permintaan dan dihubungkan oleh ampersand (&).
    2. Enkode nama dan nilai setiap parameter permintaan. Nama dan nilai harus di-enkode URL menggunakan set karakter UTF-8. Untuk detail lebih lanjut tentang aturan enkode, lihat tabel berikut.
      KarakterAturan enkode
      A hingga Z, a hingga z, 0 hingga 9, tanda hubung (-), garis bawah (_), titik (.), dan tilde (~)Karakter-karakter ini tidak perlu di-enkode
      Karakter lainnyaKarakter-karakter ini harus di-enkode persen dalam format %XY. XY mewakili kode ASCII dari karakter dalam notasi heksadesimal. Sebagai contoh, tanda kutip ganda (") di-enkode sebagai %22.
      Karakter UTF-8 yang diperluasKarakter-karakter ini di-enkode dalam format %XY%ZA….
      Karakter spasiSpasi harus di-enkode sebagai %20. Jangan enkode spasi sebagai tanda tambah (+).
      Metode enkode ini berbeda dari algoritma enkode MIME application/x-www-form-urlencoded (seperti kelas java.net.URLEncoder yang disediakan oleh pustaka standar Java). Anda dapat meng-enkode spasi berdasarkan aturan enkode untuk pustaka standar, lalu mengganti tanda tambah (+) dalam string yang di-enkode dengan %20, tanda bintang (*) dengan %2A, dan %7E dengan tilde (~). Untuk melakukan ini, Anda dapat menggunakan metode percentEncode berikut:
      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 yang di-enkode dan nilainya menggunakan tanda sama dengan (=).
    4. Urutkan pasangan nama parameter dan nilai sesuai dengan urutan yang ditentukan dalam langkah 1.1.1 dan hubungkan pasangan tersebut menggunakan ampersand (&) untuk menghasilkan string kueri kanonis.
  2. Buat string-to-sign dari string kueri kanonis yang di-enkode. Langkah-langkah untuk membuat string-to-sign adalah sebagai berikut:
    StringToSign=
          HTTPMethod + “&” +
          percentEncode(“/”) + ”&” +
           percentEncode(CanonicalizedQueryString)

    Dalam aturan sebelumnya,

    • HTTPMethod: Metode HTTP yang digunakan untuk membuat permintaan, seperti GET.
    • percentEncode(“/”): Enkode garis miring (/) sebagai %2F berdasarkan aturan enkode URL yang dijelaskan dalam langkah 1.1.2.
    • percentEncode(CanonicalizedQueryString): String ini adalah hasil dari aturan enkode URL yang dijelaskan dalam langkah i.

Langkah 2: Hitung string tanda tangan

  1. Hitung nilai HMAC dari string-to-sign sesuai definisi dalam RFC2104.
    Catatan Kunci yang digunakan untuk menghitung tanda tangan adalah Rahasia AccessKey Anda diikuti oleh ampersand (&). Algoritma SHA1 digunakan untuk perhitungan ini.
  2. Enkode nilai HMAC dalam Base64 untuk mendapatkan string tanda tangan.
  3. Tambahkan string tanda tangan ke permintaan sebagai parameter Signature.
    Catatan Saat menambahkan string tanda tangan ke permintaan sebagai parameter Signature, parameter tersebut harus di-enkode URL seperti parameter lainnya berdasarkan aturan yang didefinisikan dalam RFC3986.

Contoh

Contoh ini menunjukkan cara menandatangani permintaan API untuk memanggil operasi DescribeRegions. Asumsikan bahwa nilai parameter AccessKeyId adalah testid dan nilai parameter AccessKeySecret adalah testsecret. URL permintaan yang akan ditandatangani adalah sebagai berikut:

http://ecs.aliyuncs.com/?Timestamp=2016-02-23T12%3A46:24Z&Format=XML&AccessKeyId=testid&Action=DescribeRegions&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&SignatureVersion=1.0

String tanda tangan yang dihitung menggunakan testsecret& adalah sebagai berikut:

OLeaidS1JvxuMvnyHOwuJ+uX5qY=

Tambahkan string tanda tangan ke permintaan sebagai parameter Signature. URL permintaan yang ditandatangani adalah sebagai berikut:

http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ+uX5qY=&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%3A46%3A24Z