Skip to content

วัฏจักรของ Token (Token Lifecycle)

เอกสารนี้อธิบายวงจรชีวิตของ Token ในระบบ RawPush ตั้งแต่การสร้าง การตรวจสอบ ไปจนถึงการหมดอายุ เพื่อให้คุณเข้าใจการจัดการ Session ได้อย่างครบถ้วน


1. ช่วงเวลาเกิด (Generation)

  • ความรับผิดชอบ: ฝั่ง Backend ของคุณ
  • กระบวนการ: เมื่อผู้ใช้ (User/Client) ล็อกอินเข้าสู่ระบบของคุณ Backend จะสร้าง Token พร้อมกำหนดเวลาหมดอายุ (exp) และแนบ ID ที่ไม่ซ้ำกัน (jti) เพื่อป้องกัน Replay Attack
  • ข้อแนะนำ: ควรตั้ง expiration อยู่ระหว่าง 5 - 15 นาที ให้เพียงพอต่อการส่ง Token ไปให้ Frontend โหลดหน้าเว็บและ connect WebSocket จนสำเร็จ
    • ❌ ไม่แนะนำให้ตั้งอายุนานเป็นสัปดาห์ เพราะหาก Token หลุดไป ผู้อื่นสามารถนำไปใช้ซ้ำได้ (แม้จะมี JTI ป้องกันอยู่ แต่การจำกัดอายุสั้นๆ ยังคงปลอดภัยกว่า)

2. ช่วงเวลาใช้งาน (Consumption / Validation)

  • ความรับผิดชอบ: ระบบ RawPush

  • กระบวนการ: เมื่อ Client connect WebSocket และส่ง Command auth พร้อม Token เข้ามา ระบบ RawPush จะตรวจสอบ 3 ขั้นตอน:

    1. Signature Checker: คำนวณ HMAC-SHA256 จาก Payload ด้วย Secret Key แล้วเทียบกับ Signature ที่ส่งมา (ว่า Token นี้สร้างโดย Backend ของคุณจริงหรือไม่)
    2. Time Checker: ตรวจสอบ Timestamp exp ว่า Token ยังไม่หมดอายุ ณ เวลาปัจจุบัน
    3. JTI Checker: ตรวจสอบ jti ใน Memory ว่า JTI นี้ เคยถูกใช้งานแล้ว หรือยัง หากเคยใช้แล้วจะถูกปฏิเสธทันที (Replay Attack block)
  • สิ่งที่ควรรู้: การตรวจสอบ jti และ exp จะเกิดขึ้น แค่ตอน connect ครั้งแรก (Authentication Phase) เท่านั้น เมื่อผ่านการ authenticate เข้ามาสู่ระบบแล้ว Session จะคงอยู่ (Session established) ต่อเนื่องไปโดยไม่มีข้อจำกัดเวลา ตราบใดที่ยังมีการเชื่อมต่ออยู่ หรือจนกว่าจะถูก disconnect


3. ช่วงเวลาตาย (Expiration & Disconnection)

เมื่อ WebSocket connect สำเร็จแล้ว Session จะคงอยู่ต่อเนื่องแม้ Token ที่ใช้ตอน authenticate จะหมดอายุไปแล้ว

  • คำถาม: ถ้าผู้ใช้ถูกลบ Account ไปแล้ว แต่ยังเปิด Browser ทิ้งไว้ จะยังรับข้อมูล Real-time ได้อยู่หรือไม่?
  • คำตอบ: ใช่ หาก Developer ไม่ได้จัดการส่วนนี้ แต่ในทางปฏิบัติ เมื่อ Backend ตรวจพบว่าผู้ใช้ถูก Ban หรือ Logout แล้ว Backend ควรส่ง HTTP Request มาหา RawPush เพื่อ disconnect (ยังไม่มี API ส่วนนี้ แต่อนาคตจะรองรับการ disconnect รายคน — [ปัจจุบันใช้การเปลี่ยน Policy หรือรอ Timeout])

🚧 สิ่งที่ทำลาย Connection ทันที

  1. Network ขาดหาย: มือถือเข้าลิฟต์ เน็ตตัด Wi-Fi หลุด (สาเหตุอันดับ 1)
  2. Heartbeat Timeout: ถ้า Client ไม่ตอบ Ping ของ RawPush นานเกินกำหนด จะถูก disconnect (Clean disconnect)
  3. Revoke Key: หากคุณกด Revoke เปลี่ยน Secret Key ใน Dashboard — Connection ทั้งหมดที่ใช้ Key เดิม จะถูก disconnect ทันที (Mass Disconnect)

Released under the MIT License.