Cryptology Academy · บทเรียน

โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ

ถอดรหัสส่วนต่าง ๆ ที่เข้ารหัสแบบ base64url และทำความเข้าใจแต่ละฟิลด์ของ JWT

บทเรียน 1 จาก 413 ขั้นตอน

โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

JWT คืออะไร

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

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

JWT มีรูปแบบดังนี้: base64url(header).base64url(payload).base64url(signature) จุดใช้คั่นแต่ละส่วน ส่วนหัวและข้อมูลเนื้อหาอ่านได้ เนื่องจากใช้ base64url ไม่ใช่การเข้ารหัส มีเพียงลายเซ็นเท่านั้นที่ใช้การเข้ารหัส

ส่วนหัว

ส่วนหัวเป็นออบเจ็กต์ JSON: {"alg":"HS256","typ":"JWT"} alg ระบุอัลกอริทึมการลงลายเซ็น (HS256, RS256, ES256, none) typ มีค่าเป็น "JWT" เสมอ ส่วนหัวเพิ่มเติมอาจมี kid (รหัสคีย์ ID) เพื่อเลือกคีย์

ข้อมูลเนื้อหา / ข้อมูลอ้างสิทธิ์

ข้อมูลอ้างสิทธิ์มาตรฐานที่ลงทะเบียนไว้ ได้แก่ iss (ผู้ออก), sub (เรื่อง), aud (กลุ่มผู้รับ), exp (เวลาประทับแบบ Unix ที่หมดอายุ), nbf (ยังไม่เริ่มมีผล), iat (เวลาที่ออก), jti (รหัส JWT สำหรับการเพิกถอน) ข้อมูลอ้างสิทธิ์แบบกำหนดเองคือคู่คีย์-ค่าเพิ่มเติมใด ๆ

การถอดรหัส JWT

import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)

การตรวจสอบลายเซ็น

สำหรับ HS256: HMAC-SHA256(base64url(header)+"."+base64url(payload), secret) ตัวรับจะคำนวณค่านี้ใหม่แล้วเปรียบเทียบกับส่วนลายเซ็น หากตรงกันและโทเค็นยังไม่หมดอายุ โทเค็นนั้นถือว่าใช้ได้

ลายเซ็นแบบอสมมาตร

สำหรับ RS256: คีย์ส่วนตัวจะลงลายเซ็นให้กับสตริง header.payload โดยใช้ RSA-SHA256 ผู้ใดก็ตามที่มีคีย์สาธารณะสามารถตรวจสอบได้โดยไม่ต้องใช้คีย์ส่วนตัว คีย์สาธารณะเผยแพร่ผ่านปลายทาง JWKS (ชุดคีย์เว็บแบบ JSON) เช่น /.well-known/jwks.json

การเข้ารหัส Base64url

Base64url แทนที่ + ด้วย - และ / ด้วย _ พร้อมตัดแพดดิ้ง = ออก ทำให้ JWT ปลอดภัยเมื่อนำไปใช้ใน URL ส่วนหัว HTTP และคุกกี้โดยไม่ต้องเข้ารหัสเปอร์เซ็นต์ ไบต์ดิบยังไม่ได้ถูกเข้ารหัส เพียงแค่เข้ารหัสในรูปแบบอื่น

JWT ไม่ได้เข้ารหัสโดยค่าเริ่มต้น

ข้อมูลเนื้อหาของ JWT มองเห็นได้โดยผู้ใดก็ตามที่ถอดรหัส base64url ได้ อย่าใส่ความลับ เช่น รหัสผ่านหรือหมายเลขประกันสังคม ลงในข้อมูลเนื้อหาของ JWT เว้นแต่จะใช้ JWE (การเข้ารหัสเว็บแบบ JSON) ร่วมกับอัลกอริทึม "enc" เพื่อเข้ารหัสจริง

อายุการใช้งานโทเค็น

กำหนด exp ให้มีระยะเวลาสั้น เช่น 15–60 นาทีสำหรับโทเค็นเข้าถึง JWT ที่มีอายุยาวจะสะสมความเสี่ยง หากถูกขโมย โทเค็นจะยังใช้ได้จนกว่าจะหมดอายุ ใช้โทเค็นรีเฟรชที่จัดเก็บอย่างปลอดภัยเพื่อออกโทเค็นเข้าถึงอายุสั้นรายการใหม่

การค้นหา JWKS

ผู้ให้บริการยืนยันตัวตน เช่น Auth0, Keycloak และ Google จะเผยแพร่ URL ของ JWKS ผู้ตรวจสอบจะดึงคีย์สาธารณะตาม kid เก็บไว้ในแคช และตรวจสอบลายเซ็นโดยไม่ต้องติดต่อผู้ออกในทุกคำขอ การหมุนเวียนคีย์จะอัปเดตปลายทาง JWKS

ตรวจสอบความเข้าใจ

ส่วนใดของ JWT ที่มีลายเซ็นเข้ารหัส

สรุป

JWT ประกอบด้วยส่วน JSON ที่เข้ารหัสด้วย base64url สามส่วน ได้แก่ ส่วนหัว (อัลกอริทึม) ข้อมูลเนื้อหา (ข้อมูลอ้างสิทธิ์) และลายเซ็น ข้อมูลเนื้อหาอ่านได้และไม่ได้เข้ารหัส ขั้นต่อไป: การเลือกระหว่าง HS256 และ RS256

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

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

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

คอร์ส
67
บทเรียน
261

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

บทเรียน “โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ”

ถอดรหัสส่วนต่าง ๆ ที่เข้ารหัสแบบ base64url และทำความเข้าใจแต่ละฟิลด์ของ JWT คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

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

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

  1. โครงสร้าง JWT: ส่วนหัว ข้อมูลบรรจุ และลายมือชื่อ
  2. HS256 กับ RS256: JWT แบบสมมาตรกับแบบอสมมาตร
  3. ช่องโหว่ JWT: alg=none และความสับสนของคีย์
  4. แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน JWT อย่างปลอดภัย
← กลับไปที่ Cryptology Academy