พอดีลองมาเยอะครับ เลยขอสรุป Pattern ที่ใช้ครับ Blog ก่อนอื่น
JSON Web Token (JWT)
JWT - string ที่ถูกกำหนดเป็น และมาแก้ปัญหาเดิมๆของ Session ที่มันจำ Server (สมัยนี้ใครจะรู้จัก Session ไหมนะ 555) โดยตัว string เกิดจาก secret sign ด้วย
- symmetric algorithm อย่าง HMAC
- หรือ asymmetric algorithm ใช้ private (for signing) / public (for verification) key pair (RSA / ECDSA)
- Why JWT?
- Stateless Authentication - Information contained within the JWT
- Scalability - no needing to share session data ข้อจำกัดเดิมของ Session เลย มันเลยกลายเป็นว่า ถ้าไป Server ใหม่ต้องยิง Authen ใหม่
- Decentralized Issuance - Tokens can be issued and verified by multiple parties or services
- Fine-grained Authorization
- Short-lived & Expiry
- Standardized
- JWT Structure xxxxx.yyyyy.zzzzz
- Header (xxxxx) - ใช้ Algorithm อะไร
- Payload (yyyyy) - ของข้างใน อาจจะเรียกว่า Claim โดยมีข้อมูลว่าข้อมูลนี้ของ user อะไร มีสิทธิอะไรบ้าง แล้วหมดอายุตอนไหน และ onformation อื่นๆ
- Signature (zzzzz) - บอกว่าข้อมูลของ jwt นั้นถูกต้อง ไม่โดนแก้ ถุึงเรียกว่าเป็น digitally signed
โดย flow การทำงานจะตามรูป ฝั่ง server จะมาตรวจ client ก็มีนะ แต่ไม่นิยม

- JWT - Consideration & Practices
- Transmission: encrypted channels เช่น https
- Storage: stored securely โดยเฉพาะ Client Side เพราะ ถ้าเอาไปเก็บใน Web Storage จะเจอ XSS attacks)
- Secret: เก็บของให้ดี
- symmetric signing algorithms เช่น HMAC SHA256 ระวัง secret key
- Asymmetric algorithms (e.g., RSA/ ECDSA) เก็บพวก key อย่าให้หลุด - Expiration: Short-lived ถ้า JWT หลุดไป จะมีช่วงให้โดนโจมตีได้น้อย
แต่อาจจะประสบปัญหาว่า Login บ่อย เลยมี Concept Access Token (สั้น บอกสิทธิว่าเราทำอะไรได้) / Refresh Token (ยาวหน่อย ขอ Access Token)
ผมแยก Token ออกเป็น 2 กลุ่ม ได้แก่ Access Token กับ Refresh Token โดยแต่ละอันมีรายละเอียด ดังนี้
My Token Pattern
- Access Token
- ระยะเวลาสั้น เก็บ Anything เช่น พวกสิทธิในระบบ
- Size ยิ่งใหญ่ทำให้ Request นานๆ ข้อมูลบางอย่าง เช่น พวกสิทธิ อาจจะต้องแปลงให้เล็กที่สุด โดยอาจจะทำเป็นเลขฐาน 2 แทน
- ถ้า Expired Return Code 4xx แต่ไม่ได้อยู่ในมาตรฐานนะ แล้วแต่องค์กรจะตกลงกัน
- Refresh Token
- ระยะเวลายาว - เก็บว่า User ยังอยู่ในระบบนะ
- เอาไปขอ Access Token
- ถ้า Logout ไป Server ต้องเก็บ Token Id ว่ามัน Expired ไปแล้ว มันไม่สามารถมาขอ Token อื่นๆได้
- Pattern ของ Return Code 401 403
สำหรับการตรวจสอบ JWT ว่ามีอะไรดูจาก https://jwt.io/
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.