![translation](https://cdn.durumis.com/common/trans.png)
นี่คือโพสต์ที่แปลด้วย AI
JWT (JSON Web Token) คืออะไร?
- ภาษาที่เขียน: ภาษาเกาหลี
- •
-
ประเทศอ้างอิง: ทุกประเทศ
- •
- เทคโนโลยีสารสนเทศ
เลือกภาษา
สรุปโดย AI ของ durumis
- JSON Web Token (JWT) เป็นโทเค็นที่เข้ารหัสสำหรับการส่งข้อมูลอย่างปลอดภัย
- JWT ประกอบด้วยส่วนหัว เพย์โหลด และลายเซ็น โดยลายเซ็นช่วยรับประกันความสมบูรณ์ของข้อมูล
- JWT ไม่จำเป็นต้องจัดการข้อมูลสถานะแยกต่างหาก ทำให้มีขนาดใหญ่ในสภาพแวดล้อมแบบกระจาย
JWT คืออะไร?
JSON Web Token(JWT) เป็นวิธีการหนึ่งในการส่งข้อมูลอย่างปลอดภัยในรูปแบบ JSON object ซึ่งเป็นมาตรฐานที่เปิดเผยต่อสาธารณะ (RFC 7519) ดังนั้น จึงเป็นการนำข้อมูลที่จำเป็นมาใส่ใน token และเข้ารหัสเพื่อใช้งาน
JWT ถูกเน้นว่าเป็นโทเค็นที่ลงนาม (signed token) เมื่อใช้คีย์สาธารณะ/ส่วนตัวเป็นคู่ ในการลงนาม การลงนามนี้จะรับประกันได้ว่ามีเพียงบุคคลที่ถือครองคีย์ส่วนตัวเท่านั้นที่สามารถลงนามในโทเค็นนั้นได้ กล่าวคือ เซิร์ฟเวอร์ที่ถือครองคีย์จะรู้ว่าโทเค็นนี้ถูกต้องหรือไม่
โครงสร้าง JWT
JWT ประกอบด้วยส่วนหัว (Header) เเพย์โหลด (Payload) และลายเซ็น (Signature)
แต่ละส่วนจะถูกเข้ารหัสโดย Base64 และใช้จุด (.) เป็นตัวคั่น
ส่วนหัว
{
"alg": "HS256",
"typ": "JWT"
ส่วนหัวมีข้อมูลสำคัญสองอย่าง ได้แก่ ประเภทของโทเค็น (typ) และอัลกอริธึมลายเซ็น (alg) ที่ใช้ อัลกอริธึมลายเซ็นจะถูกใช้ในการสร้างและตรวจสอบลายเซ็น
typ ถูกกำหนดให้เป็น "JWT" และ alg จะเขียนเป็น HMAC, SHA256 เป็นต้น ตามตัวอย่างข้างต้น หมายถึงการใช้ อัลกอริธึม HS256 โดยใช้คีย์ส่วนตัว
เพย์โหลด
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
เพย์โหลดประกอบด้วย Claim ที่ต้องการส่งผ่านไปยังโทเค็น บันทึกข้อมูลประจำตัวของผู้ใช้หรือ property เกี่ยวกับโทเค็นในรูปแบบ key-value กล่าวคือ นักพัฒนาสามารถใส่ได้ตามต้องการ!
ตามข้อกำหนดมาตรฐาน ชื่อ key จะถูกกำหนดให้สั้นและกระชับใน 3 ตัวอักษร
registered claim มีดังนี้
- iss (Issuer) : ผู้เผยแพร่โทเค็น (ประกอบด้วยข้อมูลประจำตัวที่ไม่ซ้ำกันของผู้เผยแพร่โทเค็น)
- sub (Subject) : ตัวแทนที่โทเค็นมีไว้สำหรับ
- aud (Audience) : ผู้รับโทเค็น
- exp (Expiration Time) : เวลาหมดอายุของโทเค็น (หลังจากเวลาที่กำหนด โทเค็นจะไม่ถูกต้องอีกต่อไป)
- nbf (Not Before) : วันที่โทเค็นมีผลบังคับใช้ (โทเค็นจะไม่สามารถใช้ได้ก่อนเวลาที่กำหนด)
- iat (Issued At) : เวลาที่ออกโทเค็น
- jti (JWT Id) : ตัวระบุโทเค็น JWT (ใช้เพื่อแยกแยะผู้เผยแพร่หลายราย)
นอกเหนือจากค่าเหล่านี้ หากมีค่าอื่น ๆ ที่จำเป็น คุณสามารถเพิ่มค่าเหล่านั้นได้
อย่างไรก็ตาม เพย์โหลดไม่ได้ถูกเข้ารหัส แต่เป็นค่าที่ลงนาม ดังนั้นจึงไม่ควรเก็บข้อมูลที่ละเอียดอ่อน
สามารถถอดรหัสและดูได้โดยทุกคนjwt.io สามารถตรวจสอบได้ทันทีที่เว็บไซต์
ลายเซ็น
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
ส่วนหัวและเพย์โหลดจะถูกเข้ารหัสโดย base64 เชื่อมต่อด้วยจุด (.) และใช้คีย์ส่วนตัว ของคุณ -256 บิต - secret ของเซิร์ฟเวอร์เพื่อลงนาม
ดังนั้นลายเซ็น (Signature) สามารถถอดรหัสได้โดยเซิร์ฟเวอร์ที่ออกโทเค็นเท่านั้นโดยใช้คีย์ส่วนตัว
เมื่อพิจารณาการถอดรหัส คุณสามารถตรวจสอบได้โดยการถอดรหัสลายเซ็นด้วยคีย์ส่วนตัวจากนั้นตรวจสอบว่า base64UrlEncode(header) ตรงกับค่า heaer ของ JWT หรือไม่ และ base64UrlEncode(payload) ตรงกับค่าหรือไม่
ส่วนหัวและเพย์โหลดที่ไม่รวมลายเซ็นจะถูกเข้ารหัสเท่านั้น ดังนั้นจึงสามารถดูข้อมูลในข้อความได้ แต่ลายเซ็นจะช่วยรักษาความสมบูรณ์และความปลอดภัยของข้อมูล
JWT มีข้อมูลทั้งหมดที่จำเป็นในตัวของมันเอง ซึ่งเรียกว่า Self-contained ซึ่งสร้างขึ้นเพื่อแก้ไขข้อบกพร่องของเซสชันที่ต้องมีสถานะ JWT ไม่จำเป็นต้องใช้ที่เก็บข้อมูลแยกต่างหาก
เซิร์ฟเวอร์ไม่จำเป็นต้องรักษาเซสชัน ทำให้ stateless ดังนั้นจึงมีความสามารถในการปรับขนาดได้สูงในระบบที่กระจาย หรือสถาปัตยกรรมไมโครเซอร์วิส
ได้รับการปกป้องโดยลายเซ็น ดิจิทัล ลายเซ็นช่วยให้สามารถรับประกันความสมบูรณ์ของข้อมูลได้