DevToolPal
ไทย

สร้างและลงนาม JWT

สร้างและลงนาม JSON Web Token จาก payload JSON ด้วย HS256/384/512 หรือ RS, PS, ES โดยใช้คีย์ส่วนตัวแบบ PEM

ทำงานในเครื่อง ไม่มีการอัปโหลด

ตัวเลือก

รูปแบบ secret

Payload (JSON)

0 ตัวอักษร · 0 B

JWT

0 ตัวอักษร · 0 B

เครื่องมือนี้ทำอะไร

JSON Web Token (JWT, RFC 7519) คือสตริงขนาดกะทัดรัดที่ปลอดภัยสำหรับ URL มีสามส่วนคั่นด้วยจุด ได้แก่ header ที่ระบุอัลกอริทึมการลงนาม payload ที่เก็บ claim และลายเซ็นของสองส่วนแรก API ใช้ JWT เป็น bearer token และผู้ให้บริการยืนยันตัวตนใช้เป็น ID token

เครื่องมือนี้สร้างและลงนามโทเค็นจาก payload JSON รองรับ:

  • HS256, HS384, HS512: HMAC ด้วย secret ร่วม เป็นข้อความหรือ Base64
  • RS256, RS384, RS512 และ PS256, PS384, PS512: ลายเซ็น RSA ด้วยคีย์ส่วนตัว PEM
  • ES256, ES384, ES512: ลายเซ็น ECDSA ด้วยคีย์ส่วนตัว EC

วิธีใช้

  1. เขียน payload เป็นออบเจกต์ JSON หรือคลิก ตัวอย่าง
  2. เลือก อัลกอริทึม แล้วพิมพ์ secret หรือวางคีย์ส่วนตัว PEM ที่ด้านบนของช่องอินพุต
  3. หากต้องการ ตั้ง iat เป็นเวลาปัจจุบัน เพิ่มวันหมดอายุ (exp) หรือฟิลด์ header เพิ่มเติม เช่น key ID
  4. คัดลอกโทเค็นจากเอาต์พุต แล้ววางในตัวถอดรหัส JWT เพื่อตรวจดู

ตัวอย่าง

เมื่อ secret คือ your-256-bit-secret payload ด้านล่างที่ลงนามด้วย HS256 จะได้โทเค็นตัวอย่างที่คุ้นเคยจาก jwt.io:

{"sub":"1234567890","name":"John Doe","iat":1516239022}

header จะถูกเขียนเป็น {"alg":"HS256","typ":"JWT"} เสมอ ตามด้วยฟิลด์ที่คุณเพิ่ม และ alg จะตรงกับอัลกอริทึมที่เลือกเสมอ

แนวปฏิบัติที่ดี

ทำให้โทเค็นมีอายุสั้นด้วย claim exp และตั้ง iss กับ aud เพื่อไม่ให้โทเค็นของบริการหนึ่งถูกนำไปใช้ซ้ำกับอีกบริการ ฝั่งเซิร์ฟเวอร์ต้องตรวจลายเซ็นโดยระบุรายการอัลกอริทึมที่อนุญาตอย่างชัดเจนและปฏิเสธ none เสมอ secret ของ HMAC ควรยาวและสุ่ม อย่างน้อยเท่ากับความยาวผลแฮช (32 ไบต์สำหรับ HS256)

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

› ควรเลือกอัลกอริทึมไหน

เลือกแบบที่เซิร์ฟเวอร์ของคุณใช้ตรวจสอบ HS256 ใช้ secret ร่วมกันและพบบ่อยภายในระบบเดียว RS256 และ ES256 ลงนามด้วยคีย์ส่วนตัวและใครก็ตรวจสอบได้ด้วยคีย์สาธารณะ เหมาะกับโทเค็นที่หลายบริการต้องตรวจ ลายเซ็น ES256 สั้นกว่า RS256 มาก

› รองรับคีย์ส่วนตัวรูปแบบใดบ้าง

คีย์ PEM แบบ PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 RSA (BEGIN RSA PRIVATE KEY) และ SEC1 EC (BEGIN EC PRIVATE KEY) คีย์ที่เข้ารหัสไว้ต้องส่งออกแบบไม่มีรหัสผ่านก่อน สำหรับ ES256, ES384 และ ES512 คีย์ต้องอยู่บนเส้นโค้ง P-256, P-384 หรือ P-521 ตามลำดับ

› payload ของ JWT เป็นความลับหรือไม่

ไม่ header และ payload ถูกเข้ารหัสแบบ Base64URL เท่านั้น ใครที่มีโทเค็นก็อ่านได้ ลายเซ็นป้องกันการแก้ไข ไม่ได้ป้องกันการอ่าน อย่าใส่รหัสผ่านหรือข้อมูลลับอื่นใน payload ของ JWT

› secret หรือคีย์ส่วนตัวของฉันถูกบันทึกหรือส่งไปที่ไหนหรือไม่

ไม่ การลงนามทำในเบราว์เซอร์ด้วย Web Crypto API secret หรือคีย์อยู่ในหน่วยความจำของหน้านี้เท่านั้น ไม่ถูกบันทึก ไม่ถูกเขียนลงแถบที่อยู่ และไม่รวมในลิงก์แชร์ แต่ก็ไม่ควรวางคีย์ของระบบจริงในหน้าเว็บที่คุณไม่ได้ควบคุม