Saya punya dua pertanyaan:
Q1: Mengapa OAuth2 mengharuskan param diurutkan dan dikodekan (untuk 2 leg)?
Yang perlu dikhawatirkan hanyalah tanda tangan yang cocok di kedua akhir untuk data yang diberikan (string kueri).
Kita cukup memeriksa tanda tangan yang dihasilkan menggunakan string kueri.(mis. ?a=1&b=2). Karena tanda tangan dihasilkan berdasarkan kunci rahasia yang hanya diketahui oleh klien dan penyedia, kami hanya dapat mempertimbangkan string kueri tanpa pemesanan/pengkodean apa pun.
Lalu apa keuntungannya melakukan pemesanan/encoding lalu membuat tanda tangan?
Q2: Bagaimana tanda tangan ini dapat menyelamatkan saya dari serangan man-in-the middle?
Jika saya harus membuat permintaan seperti ini ke server saya dari klien:
increaseUserPoints?userId=1&pointsToAdd=5&appId=x&token=XYZ
Sekarang token XYZ akan selalu sama, sehingga peretas dapat terus mengirimkan permintaan yang sama untuk meningkatkan points
. Karena token yang dihasilkan dari appId
yang diberikan sama, server akan mengizinkannya. Bagaimana kasus ini ditangani?