เรามาจากการเริ่มต้นกันเถอะ:
JWT เป็นวิธีการที่ทันสมัยเรียบง่ายและปลอดภัยซึ่งครอบคลุมสำหรับ Json Web Tokens Json Web Tokens เป็นโซลูชั่นไร้สัญชาติสำหรับการตรวจสอบสิทธิ์ ดังนั้นไม่จำเป็นต้องเก็บสถานะเซสชันใด ๆ ไว้บนเซิร์ฟเวอร์ซึ่งแน่นอนว่าเหมาะสำหรับ API ที่สงบ Restful APIs ควรไร้สถานะเสมอและทางเลือกที่ใช้กันอย่างแพร่หลายในการรับรองความถูกต้องกับ JWT ก็คือการจัดเก็บสถานะการเข้าสู่ระบบของผู้ใช้บนเซิร์ฟเวอร์โดยใช้เซสชัน แต่แน่นอนว่าไม่เป็นไปตามหลักการที่บอกว่า API ที่สงบควรไร้สัญชาติและนั่นเป็นสาเหตุที่โซลูชันเช่น JWT ได้รับความนิยมและมีประสิทธิภาพ
ดังนั้นตอนนี้เรามาดูกันว่าการรับรองความถูกต้องใช้งานได้จริงกับ Json Web Tokens สมมติว่าเรามีผู้ใช้ที่ลงทะเบียนแล้วในฐานข้อมูลของเรา ดังนั้นลูกค้าของผู้ใช้เริ่มต้นด้วยการโพสต์คำขอด้วยชื่อผู้ใช้และรหัสผ่านแอปพลิเคชันจะตรวจสอบว่ามีผู้ใช้อยู่หรือไม่และรหัสผ่านนั้นถูกต้องแอปพลิเคชันจะสร้าง Json Web Token เฉพาะสำหรับผู้ใช้นั้น
โทเค็นจะถูกสร้างขึ้นโดยใช้สตริงความลับที่เก็บไว้บนเซิร์ฟเวอร์ ถัดไปเซิร์ฟเวอร์จะส่ง JWT นั้นกลับไปยังไคลเอนต์ซึ่งจะเก็บไว้ในคุกกี้หรือในที่จัดเก็บในตัวเครื่อง
เช่นนี้ผู้ใช้จะได้รับการรับรองความถูกต้องและลงชื่อเข้าใช้แอปพลิเคชันของเราโดยไม่ทิ้งสถานะใด ๆ ไว้บนเซิร์ฟเวอร์
ดังนั้นเซิร์ฟเวอร์จึงไม่รู้ว่าผู้ใช้คนใดที่เข้าสู่ระบบจริง แต่แน่นอนผู้ใช้รู้ว่าเขาเข้าสู่ระบบเพราะเขามี Json Web Token ที่ถูกต้องซึ่งเป็นเหมือนหนังสือเดินทางเพื่อเข้าถึงส่วนที่ได้รับการป้องกันของแอปพลิเคชัน
ดังนั้นอีกครั้งเพื่อให้แน่ใจว่าคุณมีความคิด ผู้ใช้เข้าสู่ระบบทันทีที่เขาได้รับ Json Web Token ที่ไม่ซ้ำกันซึ่งไม่ได้บันทึกไว้ที่ใดก็ได้บนเซิร์ฟเวอร์ ดังนั้นกระบวนการนี้จึงไร้สัญชาติโดยสิ้นเชิง
จากนั้นทุกครั้งที่ผู้ใช้ต้องการเข้าถึงเส้นทางที่ได้รับการป้องกันเช่นข้อมูลโปรไฟล์ผู้ใช้ของเขา เขาส่ง Json Web Token พร้อมกับคำขอไปแล้วดังนั้นจึงเป็นการแสดงพาสปอร์ตเพื่อเข้าถึงเส้นทางนั้น
เมื่อคำขอมาถึงเซิร์ฟเวอร์แล้วแอปของเราจะตรวจสอบว่า Json Web Token นั้นถูกต้องจริงหรือไม่และถ้าผู้ใช้เป็นคนที่เขาบอกว่าเขาเป็นคนดีข้อมูลที่ร้องขอจะถูกส่งไปยังลูกค้าและหากไม่มีจะมี เป็นข้อผิดพลาดที่บอกผู้ใช้ว่าเขาไม่ได้รับอนุญาตให้เข้าถึงทรัพยากรนั้น
การสื่อสารทั้งหมดนี้จะต้องเกิดขึ้นบน https ดังนั้น Http ที่เข้ารหัสจึงปลอดภัยเพื่อป้องกันไม่ให้ทุกคนสามารถเข้าถึงรหัสผ่านหรือ Json Web Tokens ได้ เท่านั้นเรามีระบบที่ปลอดภัยจริงๆ
ดังนั้น Json Web Token ดูเหมือนว่าส่วนซ้ายของภาพหน้าจอนี้ซึ่งนำมาจาก JWT ดีบักเกอร์ที่ jwt.ioSo เป็นหลักมันเป็นสตริงการเข้ารหัสที่ประกอบด้วยสามส่วน ส่วนหัว, ส่วนของข้อมูลและลายเซ็นตอนนี้ส่วนหัวเป็นเพียงข้อมูลเมตาเกี่ยวกับโทเค็นของตัวเองและส่วนของข้อมูลเป็นข้อมูลที่เราสามารถเข้ารหัสเป็นโทเค็น, ข้อมูลใด ๆ ที่เราต้องการจริงๆ ข้อมูลเพิ่มเติมที่เราต้องการเข้ารหัสที่นี่ยิ่งใหญ่ JWT อย่างไรก็ตามทั้งสองส่วนนี้เป็นเพียงข้อความธรรมดาที่จะได้รับการเข้ารหัส แต่ไม่ได้เข้ารหัส
ดังนั้นทุกคนจะสามารถถอดรหัสและอ่านได้เราไม่สามารถเก็บข้อมูลที่ละเอียดอ่อนไว้ที่นี่ได้ แต่นั่นไม่ใช่ปัญหาเลยเพราะในส่วนที่สามดังนั้นในลายเซ็นนั่นเป็นสิ่งที่น่าสนใจจริงๆ ลายเซ็นถูกสร้างขึ้นโดยใช้ส่วนหัวเพย์โหลดและความลับที่บันทึกไว้บนเซิร์ฟเวอร์
และกระบวนการทั้งหมดนี้จะเรียกว่าการลงนามใน Json เว็บ Token อัลกอริทึมการเซ็นชื่อใช้ส่วนหัวเพย์โหลดและความลับในการสร้างลายเซ็นที่ไม่ซ้ำกัน เฉพาะข้อมูลนี้และความลับเท่านั้นที่สามารถสร้างลายเซ็นนี้ได้ใช่ไหม จากนั้นเมื่อรวมกับส่วนหัวและส่วนของข้อมูลแล้วลายเซ็นเหล่านี้จะสร้าง JWT ซึ่งจะถูกส่งไปยังลูกค้า
เมื่อเซิร์ฟเวอร์ได้รับ JWT เพื่อให้สิทธิ์การเข้าถึงเส้นทางที่มีการป้องกันก็จำเป็นต้องตรวจสอบเพื่อที่จะตรวจสอบว่าผู้ใช้เป็นผู้ที่เขาอ้างว่าเป็นจริง กล่าวอีกนัยหนึ่งมันจะตรวจสอบว่าไม่มีใครเปลี่ยนส่วนหัวและข้อมูลส่วนของข้อมูลของโทเค็น ดังนั้นอีกครั้งขั้นตอนการตรวจสอบนี้จะตรวจสอบว่าไม่มีบุคคลที่สามที่เปลี่ยนแปลงส่วนหัวหรือส่วนของ Json Web Token
ดังนั้นการตรวจสอบนี้ใช้งานได้จริงอย่างไร จริงๆแล้วมันค่อนข้างตรงไปตรงมา เมื่อได้รับ JWT แล้วการตรวจสอบจะใช้ส่วนหัวและส่วนของข้อมูลและร่วมกับความลับที่ยังคงบันทึกไว้บนเซิร์ฟเวอร์โดยทั่วไปจะสร้างลายเซ็นทดสอบ
แต่ลายเซ็นดั้งเดิมที่สร้างขึ้นเมื่อ JWT ถูกสร้างขึ้นครั้งแรกนั้นยังคงอยู่ในโทเค็นใช่ไหม? และนั่นคือกุญแจสำคัญในการตรวจสอบนี้ เพราะตอนนี้สิ่งที่เราต้องทำคือการเปรียบเทียบลายเซ็นการทดสอบกับลายเซ็นต้นฉบับ และถ้าลายเซ็นการทดสอบเหมือนกันกับลายเซ็นดั้งเดิมแสดงว่าเพย์โหลดและส่วนหัวยังไม่ได้รับการแก้ไข
เพราะถ้าพวกเขาได้รับการแก้ไขแล้วลายเซ็นการทดสอบจะต้องแตกต่างกัน ดังนั้นในกรณีนี้ที่ไม่มีการเปลี่ยนแปลงข้อมูลเราสามารถตรวจสอบผู้ใช้ และแน่นอนถ้าทั้งสองลายเซ็นแตกต่างกันจริง ๆ แล้วก็หมายความว่ามีคนดัดแปลงข้อมูล มักจะพยายามเปลี่ยนน้ำหนักบรรทุก แต่บุคคลที่สามที่จัดการกับ payload นั้นแน่นอนว่าไม่มีสิทธิ์เข้าถึงความลับดังนั้นพวกเขาจึงไม่สามารถลงชื่อ JWT ได้ ดังนั้นลายเซ็นดั้งเดิมจะไม่สอดคล้องกับข้อมูลที่ถูกจัดการ ดังนั้นการตรวจสอบจะล้มเหลวเสมอในกรณีนี้ และนั่นคือกุญแจสำคัญในการทำให้ระบบทั้งหมดนี้ทำงาน มันเป็นเวทย์มนตร์ที่ทำให้ JWT นั้นเรียบง่าย แต่มีพลังมาก
md5('original messaged' + secret) != md5('changed message' + secret)
ดังนั้นหากมีคนเปลี่ยนแปลงข้อความที่คุณสามารถตรวจพบได้