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- 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.
Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )Langkah 1: Buat dan kodekan string-to-sign
- Buat string kueri kanonis dengan mengatur parameter permintaan.
- 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 (&).
- Kodekan nama dan nilai parameter permintaan yang telah diatur dalam URL permintaan menggunakan set karakter UTF-8. Tabel berikut menjelaskan aturan pengkodean.
Karakter Aturan pengkodean Huruf besar, huruf kecil, angka, tanda hubung (-), garis bawah (_), titik (.), dan tilde (~) Karakter-karakter ini tidak perlu dikodekan. Karakter lainnya Karakter-karakter ini harus dikodekan persen dalam format %XY.XYmerepresentasikan kode ASCII dari karakter dalam notasi heksadesimal. Sebagai contoh, tanda kutip ganda (") dikodekan sebagai%22.Karakter UTF-8 yang diperluas Karakter-karakter ini harus dikodekan dalam format %XY%ZA….Spasi Spasi 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 kelasjava.net.URLEncoderyang 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%7Edengan tilde (~). Anda dapat menggunakan metodepercentEncodeberikut 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; } - Hubungkan nama parameter dan nilai yang telah dikodekan menggunakan tanda sama dengan (=).
- Urutkan pasangan nama parameter dan nilai yang terhubung dalam urutan yang ditentukan dan hubungkan pasangan tersebut menggunakan ampersand (&) untuk mendapatkan string kueri kanonis.
- Atur parameter permintaan (termasuk semua parameter umum dan spesifik operasi kecuali Signature) dalam urutan abjad.
- 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
- 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.
- Kodekan nilai HMAC dalam Base64 untuk mendapatkan string tanda tangan.
- 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-20Jika 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****