แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย
จัดเก็บ หมุนเวียน และเพิกถอน JWT อย่างปลอดภัยในแอปพลิเคชันจริง
แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
หลักการสำคัญ
ความปลอดภัยของ JWT ขึ้นอยู่กับการนำไปใช้งาน ข้อกำหนดมีความยืดหยุ่น และความยืดหยุ่นนี้ก่อให้เกิดช่องโหว่ ให้ปฏิบัติตามแนวทางที่ดีที่สุดต่อไปนี้เพื่อหลีกเลี่ยงข้อผิดพลาดทั่วไป ซึ่งเคยทำให้ระบบจริงถูกหลบเลี่ยงการยืนยันตัวตน
กำหนดอัลกอริทึมตายตัว
ระบุอัลกอริทึมที่คาดหวังไว้อย่างชัดเจนเสมอ: jwt.decode(token, key, algorithms=["RS256"]) อย่าอ่านอัลกอริทึมจากส่วนหัวโทเค็นเพื่อเลือกกุญแจตรวจสอบหรือเส้นทางการทำงานของโค้ด วิธีนี้ป้องกันการโจมตี alg=none และการโจมตีแบบสับสนของกุญแจ
อายุสั้น + โทเค็นรีเฟรช
โทเค็นเข้าถึง: 15–60 นาที โทเค็นรีเฟรช: 7–30 วัน จัดเก็บในคุกกี้ httpOnly (ไม่ใช่ localStorage) เมื่อหมดอายุ ไคลเอนต์ใช้โทเค็นรีเฟรชเพื่อขอโทเค็นเข้าถึงใหม่จากเซิร์ฟเวอร์ยืนยันตัวตน โดยไม่ต้องยืนยันตัวตนอีกครั้ง
การตรวจสอบผู้รับและผู้ออก
ตรวจสอบ aud (ผู้รับ) เพื่อให้แน่ใจว่าโทเค็นออกให้บริการของคุณ ไม่ใช่บริการอื่น ตรวจสอบ iss (ผู้ออก) กับ URL ของเซิร์ฟเวอร์ยืนยันตัวตนของคุณ หากไม่มีการตรวจสอบเหล่านี้ โทเค็นจากแอปอื่นที่ลงลายเซ็นด้วยกุญแจเดียวกันก็จะได้รับการยอมรับ
การจัดเก็บโทเค็น
โทเค็นเข้าถึงในหน่วยความจำ (ตัวแปร JS) — จะถูกล้างเมื่อปิดแท็บ โทเค็นรีเฟรชในคุกกี้ httpOnly, Secure, SameSite=Strict — JavaScript ไม่สามารถเข้าถึงได้ อย่าจัดเก็บ JWT ใน localStorage เด็ดขาด — XSS สามารถขโมยโทเค็นได้
กลยุทธ์การเพิกถอน
JWT ไม่มีสถานะ — ไม่มีการเพิกถอนในตัวเลือกที่ทำได้ ได้แก่ รักษารายการเพิกถอน (รายการปฏิเสธ) และตรวจสอบทุกคำขอ ใช้อายุหมดอายุที่สั้นมาก หรือใช้โทเค็นทึบแสงพร้อมการค้นหาจากศูนย์กลางสำหรับบริบทที่มีความปลอดภัยสูง
การหมุนเวียนกุญแจ
หมุนเวียนกุญแจลงลายเซ็นเป็นประจำ เผยแพร่กุญแจหลายดอกใน JWKS โดยใช้ค่า kid ต่างกัน ระหว่างการหมุนเวียน: ออกโทเค็นใหม่ด้วย kid ใหม่ คงกุญแจเก่าไว้จนกว่าโทเค็นเก่าจะหมดอายุ แล้วจึงนำกุญแจเก่าออกจาก JWKS
ข้อมูลละเอียดอ่อนในเพย์โหลด
อย่าใส่ข้อมูลละเอียดอ่อน (รหัสผ่าน หมายเลขประกันสังคม บัตรเครดิต) ในเพย์โหลด JWT เด็ดขาด เพราะข้อมูลดังกล่าวเข้ารหัสแบบ base64url ไม่ใช่การเข้ารหัสลับ ใช้ JWE (JSON Web Encryption) หากต้องการข้ออ้างสิทธิ์ที่เข้ารหัส หรือเก็บข้อมูลละเอียดอ่อนไว้ฝั่งเซิร์ฟเวอร์
HTTPS เท่านั้น
ส่ง JWT ผ่าน HTTPS เท่านั้น JWT ที่ถูกดักจับผ่าน HTTP ทำให้เกิดการหลบเลี่ยงการยืนยันตัวตนได้ทั้งหมด ตั้งค่าสถานะ Secure ให้กับคุกกี้ ใช้ HSTS เพื่อป้องกันการลดระดับโพรโทคอล อย่าบันทึกสตริง JWT แบบเต็มลงในบันทึกของเซิร์ฟเวอร์เด็ดขาด
การเลือกไลบรารี
ใช้ไลบรารีที่ได้รับการดูแลอย่างต่อเนื่อง: PyJWT 2+, python-jose, auth0/node-jsonwebtoken 9+, Nimbus JOSE + JWT (Java) หลีกเลี่ยงการเขียนการตรวจสอบ JWT ขึ้นเองตั้งแต่ต้น ตรวจสอบฐานข้อมูล CVE เพื่อหาโหว่ของไลบรารีเป็นประจำ
การทดสอบ
ทดสอบเวกเตอร์การโจมตีทั้งหมด: ส่งโทเค็น alg=none โทเค็นที่สับสนระหว่าง RS256→HS256 โทเค็นหมดอายุ โทเค็นที่มีผู้รับไม่ถูกต้อง และเพย์โหลดที่ถูกแก้ไข ใช้ jwt.io เพื่อสร้างโทเค็นทดสอบ เพิ่มการทดสอบแบบผสานรวมที่ยืนยันว่าโทเค็นเหล่านี้ถูกปฏิเสธด้วย 401
ตรวจสอบความเข้าใจ
ควรจัดเก็บโทเค็นรีเฟรชไว้ที่ใดในแอปพลิเคชันเว็บ
สรุปทบทวน
การใช้ JWT อย่างปลอดภัยต้องกำหนดอัลกอริทึมตายตัว ใช้อายุโทเค็นเข้าถึงที่สั้น จัดเก็บโทเค็นรีเฟรชในคุกกี้ httpOnly ตรวจสอบผู้รับและผู้ออก และหมุนเวียนกุญแจ ต่อไป: รูปแบบการแบ่งปันคีย์ลับด้วยวิทยาการเข้ารหัส
คำถามที่พบบ่อย
บทเรียน “แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย”
จัดเก็บ หมุนเวียน และเพิกถอน JWT อย่างปลอดภัยในแอปพลิเคชันจริง คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ
- HS256 กับ RS256: JWT แบบสมมาตรกับแบบอสมมาตร
- ช่องโหว่ JWT: alg=none และความสับสนของคีย์
- แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย