JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ
นำโทเค็นเว็บ JSON (JWT) มาใช้สำหรับการยืนยันตัวตนแบบไร้สถานะ พร้อมจัดการเซสชันผู้ใช้อย่างปลอดภัย
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 ทำงานในกระบวนการยืนยันตัวตนดังนี้:
- ผู้ใช้เข้าสู่ระบบด้วยข้อมูลรับรอง
- เซิร์ฟเวอร์ตรวจสอบข้อมูลรับรองและสร้าง JWT
- เซิร์ฟเวอร์ส่ง JWT กลับไปยังไคลเอ็นต์
- ไคลเอ็นต์จัดเก็บ JWT (เช่น ในพื้นที่จัดเก็บภายในเครื่องหรือคุกกี้)
- สำหรับคำขอถัดไป ไคลเอ็นต์จะส่ง JWT (โดยทั่วไปอยู่ในส่วนหัว
Authorization) - เซิร์ฟเวอร์ตรวจสอบลายเซ็นและเวลาหมดอายุของ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การลงทะเบียนและเข้าสู่ระบบผู้ใช้
- การสร้างและตรวจสอบโทเค็น JWT
- JWT สำหรับการยืนยันตัวตนแบบไร้สถานะ
- การผสานรวมโฟลว์รหัสผ่าน OAuth2
- การควบคุมการเข้าถึงตามบทบาท
- การควบคุมการเข้าถึงตามบทบาท (RBAC)