JSON Web Token

หลายคนคงเคยใช้งาน Session หลังจากทำการ Login ด้วย Username และ Password จะทำการสร้าง Session เพื่อใช้ในการยืนยันการ Authentication ทำให้ไม่ต้องทำการ Login ด้วย Username และ Password ทุกครั้งที่มีการเชื่อมต่อกับ Server แล้ว JSON Web Token นั้นมีดีอย่างไร ทำไมคนถึงนิยมใช้ในปัจจุบัน

Authentication

Session

Token

JSON Web Token

Payload

เป็นส่วนของ Data ที่เรียกกันว่า JWT Claim โดยจะเป็นการอ้างสิทธิ์ของผู้ใช้งาน User ที่ร้องขอ ซึ่งจะแบ่งเป็น 3 ประเภท Registered Claim, Public Claim และ Private Claim

  • Registered Claim : เป็นส่วนที่ใช้บอกรายละเอียด เช่น Issuer ( iss ), Subject ( sub ), Audience ( aud ), Expire Time ( exp ) และอื่น ๆ

  • Public Claim : เป็นส่วนที่สามารถสร้างได้เอง แต่ควรมีการกำหนด IANA JSON Web Token Registry เพื่อป้องกัน Collision Resistant การชนกัน หรือใช้ URL นำหน้าในการสร้าง Namespace

  • Private Claim : เป็นส่วนที่สามารถสร้าง เพื่อ Share ข้อมูลระหว่าง Parties ที่มีการตกลงกัน ซึ่งจะไม่ใช่ทั้ง Registered Claim และ Public Claim หมายความว่าไม่ต้องสนใจ Collision Resistant

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

เป็นส่วนของ Digital Signature โดยจะใช้ Secret ที่ได้จากการ Generate JWT ของแต่ละ Web Service มาทำการยืนยันตัวตน

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

เมื่อทำการ Encode แต่ะละส่วนด้วย Base64Url แล้วรวมทั้ง 3 ส่วนเข้าด้วยกัน จะได้รหัสขึ้นมาชุดหนึ่ง

xxxxx.yyyyy.zzzzz

JWT Debugger

Comparison

อ่านเพิ่มเติม : https://bit.ly/20I8XQq, https://bit.ly/2Zguf8J, https://bit.ly/31MyJ8A, https://bit.ly/31P0PjE, https://bit.ly/31LwDWp

Last updated

Was this helpful?