ฉันเพิ่งอ่านบทความนี้ที่มีอายุไม่กี่ปี แต่อธิบายวิธีที่ชาญฉลาดในการรักษา REST API ของคุณ เป็นหลัก:
- ลูกค้าแต่ละรายมีคู่คีย์สาธารณะ / ส่วนตัวที่ไม่ซ้ำกัน
- เฉพาะลูกค้าและเซิร์ฟเวอร์เท่านั้นที่รู้รหัสส่วนตัว มันไม่เคยถูกส่งผ่านสาย
- ด้วยการร้องขอแต่ละครั้งไคลเอนต์ใช้หลายอินพุต (การร้องขอทั้งหมดเองการประทับเวลาปัจจุบันและคีย์ส่วนตัว) และเรียกใช้ผ่านฟังก์ชัน HMAC เพื่อสร้างแฮชของการร้องขอ
- จากนั้นไคลเอ็นต์จะส่งคำขอปกติ (ซึ่งมีรหัสสาธารณะ) และแฮชไปยังเซิร์ฟเวอร์
- เซิร์ฟเวอร์ค้นหาคีย์ส่วนตัวของลูกค้า (ตามคีย์สาธารณะที่ให้ไว้) และทำการตรวจสอบเวลาบางอย่าง (ที่ยอมรับกันโดยทั่วไปว่าฉันไม่เข้าใจ) ที่ยืนยันว่าคำขอไม่ตกเป็นเหยื่อของการโจมตีซ้ำ
- ถ้าทุกอย่างเรียบร้อยแล้วเซิร์ฟเวอร์จะใช้ไพรเวตคีย์และฟังก์ชั่น HMAC เดียวกันเพื่อสร้างการแฮชของคำขอ
- เซิร์ฟเวอร์จะเปรียบเทียบแฮชทั้งสอง (อันที่ส่งโดยลูกค้าเช่นเดียวกับที่สร้างขึ้น); หากตรงกันจะมีการตรวจสอบความถูกต้องและอนุญาตให้ดำเนินการต่อได้
จากนั้นฉันสะดุดJWTซึ่งฟังดูคล้ายกันมาก อย่างไรก็ตามบทความแรกไม่ได้พูดถึง JWT เลยและฉันก็สงสัยว่า JWT นั้นแตกต่างจากวิธีแก้ปัญหาข้างต้นหรือไม่และถ้าเป็นเช่นนั้น