Node.js Backend Development Bootcamp · บทเรียน

JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ

นำโทเค็นเว็บ JSON (JWT) มาใช้สำหรับการยืนยันตัวตนแบบไร้สถานะ พร้อมจัดการเซสชันผู้ใช้อย่างปลอดภัย

บทเรียน 3 จาก 611 ขั้นตอน

JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ เป็นบทเรียน Node.js Backend Development Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Node.js Backend Development Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Node.js Backend Development Bootcamp มีบทเรียนทั้งหมด 6 บทเรียน

JWT คืออะไร

ในบทเรียนนี้ เราจะลงลึกเกี่ยวกับโทเค็นเว็บ JSON (JWT) ซึ่งเป็นวิธีการขนาดกะทัดรัดและปลอดภัยสำหรับ URL ในการแทนข้อมูลสิทธิ์ที่ส่งต่อระหว่างสองฝ่าย

JWT มีความสำคัญอย่างยิ่งต่อการยืนยันตัวตนแบบไร้สถานะ ซึ่งหมายความว่าเซิร์ฟเวอร์ไม่จำเป็นต้องจัดเก็บข้อมูลเซสชัน แต่ข้อมูลผู้ใช้ที่จำเป็นทั้งหมดจะถูกฝังไว้ในโทเค็นโดยตรง

โครงสร้าง JWT: สามส่วน

JWT ประกอบด้วยสามส่วนที่แยกจากกันด้วยจุด (.):

  • ส่วนหัว: ข้อมูลเกี่ยวกับโทเค็นนั้นเอง
  • ส่วนข้อมูล: ข้อมูลจริง (ข้อมูลสิทธิ์) ที่คุณต้องการส่ง
  • ลายเซ็น: ใช้ตรวจสอบว่าโทเค็นไม่ถูกแก้ไข

มีลักษณะดังนี้: xxxxx.yyyyy.zzzzz

เจาะลึกส่วนหัวและส่วนข้อมูล

ส่วนหัวมักประกอบด้วยสองส่วน:

  • alg: อัลกอริทึมที่ใช้ลงลายเซ็น (เช่น HMAC SHA256 หรือ RSA)
  • typ: ประเภทของโทเค็น ซึ่งโดยปกติคือ 'JWT'

ส่วนข้อมูลประกอบด้วย 'ข้อมูลสิทธิ์' ซึ่งเป็นข้อความเกี่ยวกับเอนทิตี (โดยทั่วไปคือผู้ใช้) และข้อมูลเพิ่มเติม ข้อมูลสิทธิ์ที่พบบ่อย ได้แก่:

  • sub (หัวข้อ): ID ของผู้ใช้
  • iss (ผู้ออก): ผู้ที่ออกโทเค็น
  • exp (เวลาหมดอายุ): เวลาที่โทเค็นหมดอายุ

อธิบายลายเซ็น

ลายเซ็นคือสิ่งที่ทำให้ JWT ปลอดภัย ลายเซ็นถูกสร้างขึ้นโดยนำส่วนหัวที่เข้ารหัสแล้ว ส่วนข้อมูลที่เข้ารหัสแล้ว กุญแจลับ และอัลกอริทึมที่ระบุไว้ในส่วนหัวมาลงลายเซ็นร่วมกัน

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )

หากมีผู้พยายามแก้ไขส่วนหัวหรือส่วนข้อมูล การตรวจสอบลายเซ็นจะล้มเหลว ซึ่งบ่งชี้ว่าโทเค็นไม่ถูกต้องหรือถูกแก้ไข

ภาพรวมกระบวนการทำงานของ JWT

โดยทั่วไป JWT ทำงานในกระบวนการยืนยันตัวตนดังนี้:

  1. ผู้ใช้เข้าสู่ระบบด้วยข้อมูลรับรอง
  2. เซิร์ฟเวอร์ตรวจสอบข้อมูลรับรองและสร้าง JWT
  3. เซิร์ฟเวอร์ส่ง JWT กลับไปยังไคลเอ็นต์
  4. ไคลเอ็นต์จัดเก็บ JWT (เช่น ในพื้นที่จัดเก็บภายในเครื่องหรือคุกกี้)
  5. สำหรับคำขอถัดไป ไคลเอ็นต์จะส่ง JWT (โดยทั่วไปอยู่ในส่วนหัว Authorization)
  6. เซิร์ฟเวอร์ตรวจสอบลายเซ็นและเวลาหมดอายุของ JWT ก่อนประมวลผลคำขอ

การสร้าง JWT ใน Node.js

เราจะใช้ไลบรารี jsonwebtoken ยอดนิยม ก่อนอื่นให้ติดตั้งด้วย npm install jsonwebtoken

ตัวอย่างนี้แสดงวิธีลงลายเซ็น (สร้าง) JWT ใหม่พร้อมส่วนข้อมูลและเวลาหมดอายุ อย่าลืมเก็บ secretKey ไว้อย่างปลอดภัยเป็นอย่างยิ่ง

const jwt = require('jsonwebtoken');

const payload = {
  userId: 'user123',
  username: 'coddykit'
};

// A strong, secret key. Keep this secure in a .env file!
const secretKey = 'your_super_secret_key_12345'; 

const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

console.log('Generated JWT:');
console.log(token);

การตรวจสอบ JWT ใน Node.js

เมื่อคุณได้รับ JWT จากไคลเอ็นต์ เซิร์ฟเวอร์ของคุณจำเป็นต้องตรวจสอบความถูกต้องของโทเค็น เมธอด jwt.verify() จะตรวจสอบลายเซ็นและเวลาหมดอายุ

หากโทเค็นถูกต้อง เมธอดจะส่งคืนส่วนข้อมูลที่ถอดรหัสแล้ว หากไม่ถูกต้อง เมธอดจะส่งข้อผิดพลาด (เช่น TokenExpiredError หรือ JsonWebTokenError)

const jwt = require('jsonwebtoken');

// Replace with a valid token generated from the previous step
const tokenToVerify = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyMTIzIiwidXNlcm5hbWUiOiJjb2RkeWtpdCIsImlhdCI6MTY3ODg4NjQwMCwiZXhwIjoxNjc4ODkwMDAwfQ.SOME_RANDOM_SIGNATURE';

const secretKey = 'your_super_secret_key_12345'; 

try {
  const decoded = jwt.verify(tokenToVerify, secretKey);
  console.log('Token is valid!');
  console.log('Decoded Payload:', decoded);
} catch (err) {
  console.log('Token verification failed:');
  console.log(err.message);
}

การจัดเก็บ JWT อย่างปลอดภัย

ตำแหน่งที่คุณจัดเก็บ JWT ฝั่งไคลเอ็นต์มีความสำคัญอย่างยิ่งต่อความปลอดภัย:

  • พื้นที่จัดเก็บภายในเครื่อง / พื้นที่จัดเก็บเซสชัน: ใช้งานง่าย แต่เสี่ยงต่อการโจมตีแบบ Cross-Site Scripting (XSS) หาก JavaScript ที่เป็นอันตรายสามารถเข้าถึงได้
  • คุกกี้ HttpOnly: ปลอดภัยจาก XSS มากกว่า เพราะ JavaScript ไม่สามารถเข้าถึงได้ อย่างไรก็ตาม คุกกี้เหล่านี้เสี่ยงต่อการปลอมแปลงคำขอข้ามไซต์ (CSRF) หากไม่ได้รับการป้องกันอย่างเหมาะสม

โดยทั่วไปจะใช้การผสมผสานกลยุทธ์ต่าง ๆ หรือใช้งานโทเค็น CSRF อย่างรอบคอบ

โทเค็นเข้าถึงกับโทเค็นรีเฟรช

เพื่อเพิ่มความปลอดภัย แอปพลิเคชันจำนวนมากใช้โทเค็นสองประเภท:

  • โทเค็นเข้าถึง: มีอายุสั้น (เช่น 15 นาทีถึง 1 ชั่วโมง) ใช้สำหรับเรียก API โดยตรง หากถูกขโมย ประโยชน์ในการใช้งานจะมีจำกัด
  • โทเค็นรีเฟรช: มีอายุยาว จัดเก็บไว้อย่างปลอดภัย (เช่น ในคุกกี้ HttpOnly) ใช้ขอโทเค็นเข้าถึงใหม่เมื่อโทเค็นปัจจุบันหมดอายุ โดยไม่ต้องให้ผู้ใช้เข้าสู่ระบบอีกครั้ง

รูปแบบนี้ช่วยลดความเสี่ยงที่โทเค็นเข้าถึงอายุยาวจะถูกบุกรุก

ตรวจสอบองค์ประกอบของ JWT

มาทดสอบความเข้าใจเกี่ยวกับ JWT ของคุณอย่างรวดเร็วกัน

สรุป JWT

คุณเรียนรู้เกี่ยวกับโทเค็นเว็บ JSON สำเร็จแล้ว เราได้ครอบคลุมหัวข้อต่อไปนี้:

  • JWT คืออะไรและมีบทบาทอย่างไรในการยืนยันตัวตนแบบไร้สถานะ
  • สามส่วน ได้แก่ ส่วนหัว ส่วนข้อมูล และลายเซ็น
  • วิธีสร้างและตรวจสอบ JWT โดยใช้ Node.js
  • ข้อควรพิจารณาที่สำคัญเกี่ยวกับการจัดเก็บฝั่งไคลเอ็นต์และการใช้โทเค็นรีเฟรช

JWT เป็นเครื่องมือที่มีประสิทธิภาพสำหรับสร้างระบบยืนยันตัวตนที่ปลอดภัยและขยายขนาดได้ในแอปพลิเคชัน Node.js ของคุณ

เริ่มต้นได้ฟรี

เรียนรู้ JavaScript ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
22
บทเรียน
92

คำถามที่พบบ่อย

บทเรียน “JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Node.js Backend Development Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Node.js Backend Development Bootcamp มีบทเรียนทั้งหมด 6 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ”

นำโทเค็นเว็บ JSON (JWT) มาใช้สำหรับการยืนยันตัวตนแบบไร้สถานะ พร้อมจัดการเซสชันผู้ใช้อย่างปลอดภัย คุณปฏิบัติ Node.js Backend Development Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Node.js Backend Development Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Node.js Backend Development Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 6 บทเรียน

บทเรียน “JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Node.js Backend Development Bootcamp นี้ได้ไหม

ได้ บทเรียน Node.js Backend Development Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การลงทะเบียนและเข้าสู่ระบบผู้ใช้
  2. การสร้างและตรวจสอบโทเค็น JWT
  3. JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ
  4. การผสานรวมโฟลว์รหัสผ่าน OAuth2
  5. การควบคุมการเข้าถึงตามบทบาท
  6. การควบคุมการเข้าถึงตามบทบาท (RBAC)
← กลับไปที่ Node.js Backend Development Bootcamp