全部产品
Search
文档中心

Mobile Platform as a Service:Verifikasi signature backend

更新时间:Jan 29, 2026

Mobile Gateway Service menyediakan verifikasi signature HTTP di sisi server untuk mengamankan lalu lintas antara gateway dan server backend Anda.

  • Saat Anda mengaktifkan verifikasi signature untuk kelompok API di Konsol gateway, Mobile Gateway Service menandatangani setiap permintaan API dalam kelompok tersebut. Anda dapat membuat kunci publik dan kunci privat yang digunakan untuk penandatanganan di Konsol gateway.

  • Server backend Anda membaca string signature dan menghitung signature secara lokal terhadap permintaan yang diterima. Selanjutnya, server membandingkan signature yang dihitung dengan signature yang diterima untuk menentukan validitas permintaan tersebut.

Membaca tanda tangan

Signature yang dihitung oleh Mobile Gateway Service disimpan dalam header permintaan. Kunci header tersebut adalah X-Mgs-Proxy-Signature.

Identifier kunci rahasia dikonfigurasi dalam kelompok API dan digunakan untuk menemukan nilai rahasia yang sesuai. Identifier ini dikirim dalam header permintaan dengan kunci X-Mgs-Proxy-Signature-Secret-Key.

Metode verifikasi signature

Data untuk menambahkan signature organisasi

String stringToSign =
HTTPMethod + "\n" +
Content-MD5 + "\n" +
Url
  • HTTPMethod: Metode HTTP dalam huruf kapital, seperti PUT atau POST.

  • Content-MD5: Nilai MD5 dari badan permintaan, dihitung sebagai berikut:

    1. Jika HTTPMethod bukan `PUT` atau `POST`, nilai MD5 adalah string kosong (`""`).

    2. Jika badan permintaan berupa form, MD5-nya adalah string kosong "". Jika tidak, lanjutkan ke langkah ketiga.

    3. Hitung nilai MD5. Jika permintaan tidak memiliki badan, bodyStream adalah string "null".

      String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getBytes("UTF-8")));
      Penting

      Meskipun nilai Content-MD5 adalah string kosong (`""`), line feed (`\n`) berikutnya dalam string yang akan ditandatangani tetap harus disertakan. Hal ini menghasilkan dua karakter `\n` berturut-turut dalam string tersebut.

  • Url: `Url` dibentuk dari path, kueri, dan parameter form dalam badan permintaan. Sebagai contoh, asumsikan permintaan adalah http://ip:port/test/testSign?c=3&a=1 dan parameter form-nya adalah b=2&d=4. `Url` dibentuk sebagai berikut:

    1. Ambil path-nya. Path adalah bagian URL setelah ip:port dan sebelum ?. Dalam contoh ini, path-nya adalah /test/testSign.

    2. Jika permintaan tidak memiliki parameter kueri atau form, `Url` sama dengan path tersebut.

    3. Gabungkan parameter-parameter tersebut. Urutkan parameter kueri dan form berdasarkan kuncinya dalam urutan leksikografis. Lalu, gabungkan menjadi format Key1=Value1&Key2=Value2&...&KeyN=ValueN. Dalam contoh ini, hasilnya adalah a=1&b=2&c=3&d=4.

      Catatan

      Jika parameter kueri atau form memiliki multiple value, gunakan hanya value pertama.

    4. Bentuk `Url`. Formatnya adalah Path?Key1=Value1&Key2=Value2&...&KeyN=ValueN. Dalam contoh ini, `Url`-nya adalah /test/testSign?a=1&b=2&c=3&d=4.

Verifikasi tanda tangan

  • Verifikasi signature menggunakan algoritma MD5

      String sign = "xxxxxxx"; // Signature dari Mobile Gateway Service
      String salt ="xxx";     // Salt MD5
    
      MessageDigest digest = MessageDigest.getInstance("MD5");
      String toSignedContent = stringToSign + salt;
      byte[] content = digest.digest(toSignedContent.getBytes("UTF-8"));
      String computedSign = new String(Hex.encodeHexString(content));
    
      boolean isSignLegal = sign.equals(computedSign) ? true : false;
  • Verifikasi signature menggunakan algoritma RSA

      String sign = "xxxxxxx"; // Signature dari Mobile Gateway Service
      String publicKey ="xxx"; // Kunci publik RSA dari Mobile Gateway Service
    
      PublicKey pubKey = KeyReader.getPublicKeyFromX509("RSA", new ByteArrayInputStream(publicKey.getBytes()));
      java.security.Signature signature = java.security.Signature.getInstance("SHA1WithRSA");
      signature.initVerify(pubKey);
      signature.update(stringToSign.getBytes("UTF-8"));
    
      boolean isSignLegal = signature.verify(Base64.decodeBase64(sign.getBytes("UTF-8")));

Contoh kode

Untuk informasi lebih lanjut, lihat HttpSignUtil.java.