Pengesahan tandatangan dan penyulitan serta penyahsulitan data pengguna API applet WeChat


Pengesahan tandatangan dan penyulitan serta penyahsulitan data pengguna


Pengesahan tandatangan data

Untuk memastikan keselamatan data pengguna dikembalikan oleh antara muka terbuka, WeChat akan menandatangani data teks biasa. Pembangun boleh melakukan pengesahan tandatangan pada paket data berdasarkan keperluan perniagaan untuk memastikan integriti data.

  1. Algoritma pengesahan tandatangan melibatkan session_key pengguna diperolehi melalui proses log masuk wx.login, dan hubungan yang sepadan dengan status log masuk aplikasi itu sendiri dikekalkan.
  2. Apabila mendapatkan data dengan memanggil antara muka (seperti wx.getUserInfo), antara muka akan mengembalikan rawData dan tandatangan pada masa yang sama, di mana tandatangan = sha1( rawData + session_key )
  3. Pemaju akan menghantar tandatangan dan rawData kepada pembangun pelayan untuk pengesahan. Pelayan menggunakan session_key sepadan pengguna untuk mengira tandatangan tandatangan2 menggunakan algoritma yang sama, dan membandingkan tandatangan dan tandatangan2 untuk mengesahkan integriti data.

Sebagai contoh, pengesahan data wx.getUserInfo:

rawData dikembalikan oleh antara muka:

{
  "nickName": "Band",
  "gender": 1,
  "language": "zh_CN",
  "city": "Guangzhou",
  "province": "Guangdong",
  "country": "CN",
  "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"
}

Kunci sesi pengguna:

rreee

Jadi, rentetan yang digunakan untuk tandatangan ialah: hasilnya ialah

HyVFkGl5F5OQWJZZaNzBBg==

algoritma penyahsulitan data yang disulitkan

Jika antara muka melibatkan data sensitif (seperti openId dan unionId dalam

), kandungan teks biasa antara muka tidak akan mengandungi data sensitif ini. Jika pembangun perlu mendapatkan data sensitif, mereka perlu menyahsulit secara simetri

Data Terselit (Data Terselit)wx.getUserInfo yang dikembalikan oleh antara muka. Algoritma penyahsulitan adalah seperti berikut:

Algoritma yang digunakan untuk penyahsulitan simetri ialah AES-128-CBC, dan data diisi dengan PKCS#7.
  1. teks sifir sasaran penyahsulitan simetri ialah Base64_Decode(Data yang disulitkan),
  2. Aeskey kunci penyahsulitan simetri = Base64_Decode(session_key), aeskey ialah 16 bait
  3. Vektor awal iv bagi algoritma penyahsulitan simetri akan dikembalikan antara muka data simetri
  4. WeChat secara rasmi menyediakan kod sampel dalam berbilang bahasa pengaturcaraan (klik untuk memuat turun). Nama antara muka adalah konsisten untuk setiap jenis bahasa. Kaedah panggilan boleh merujuk kepada contoh.

Selain itu, untuk aplikasi mengesahkan kesahihan data, kami akan menambah tera air (watermark) data pada data sensitif

perihalan parameter tera air:

QQ截图20170208150911.png seperti antara muka http: //www.w3cschool.cn /weixinapp/weixinapp-open.html Tera air dalam data sensitif:

{"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"}HyVFkGl5F5OQWJZZaNzBBg==

Nota:

data yang disulitkan (Data)

dan algoritma penyulitan yang sepadan akan ditamatkan penggunaannya pada logik lama.