• iat
  • issued at time
  • invalid-iat
  • invalid issued at time
  • id token

ทำความเข้าใจถึงความสำคัญของการอ้างสิทธิ์โทเค็น "iat" และการแก้ไขข้อผิดพลาด "Invalid issued at time"

ในโพสต์นี้ เราจะสำรวจถึงความสำคัญของการอ้างสิทธิ์ "iat" ใน ID token และวิธีการแก้ไขข้อผิดพลาด "Invalid issued at time in ID token"

Charles
Charles
Developer

ทำความเข้าใจถึงความสำคัญของการอ้างสิทธิ์โทเค็น “iat” และการแก้ไขข้อผิดพลาด “Invalid issued at time”

เบื้องหลัง

ในชุมชนของเรา ทุกๆ คราวก็จะได้ยินจากผู้ใช้ของเราถึงปัญหา "Invalid issued at time in the ID token" ซึ่งทำให้ต้องเกาหัว ผู้ใช้ของเราบ่นว่า "มันใช้งานได้เมื่อวาน แต่วันนี้ไม่ได้" หรือ "มันใช้งานได้บนคอมพิวเตอร์เครื่องนี้ แต่ไม่ได้กับอีกเครื่องหนึ่ง"

ในโพสต์นี้ เราจะสำรวจว่าทำไมปัญหานี้จึงเกิดขึ้นใน Logto และติดอาวุธให้คุณด้วยเคล็ดลับการจัดการกับมัน

บทนำ

ใน OAuth 2.0 และ OpenID Connect (OIDC) ID tokens มีบทบาทสำคัญในการส่งข้อมูลประจำตัวของผู้ใช้อย่างปลอดภัยระหว่างฝ่ายต่างๆ หนึ่งในคำอ้างสิทธิ์ใน ID token คือ "iat" (issued-at-time) ซึ่งเป็นการแทนที่ timestamp ขณะที่ ID token ถูกออกโดยเซิร์ฟเวอร์การอนุญาต

เหตุใดการอ้างสิทธิ์ “iat” จึงมีความสำคัญ?

  1. ความสดใหม่และการหมดอายุของโทเค็น: การอ้างสิทธิ์ "iat" มอบข้อมูลสำคัญสำหรับการประเมินความสดใหม่ของ ID token โดยการเปรียบเทียบ timestamp "iat" กับเวลาปัจจุบัน ฝ่ายที่พึ่งพิงสามารถกำหนดได้ว่าโทเค็นถูกออกมาล่าสุดแค่ไหน ข้อมูลนี้เป็นประโยชน์สำหรับแอปพลิเคชันที่ต้องการใช้ข้อมูลประจำตัวที่ทันสมัย
  2. บรรเทาการโจมตีซ้ำซ้อน: การอ้างสิทธิ์ "iat" มีบทบาทสำคัญในการบรรเทาการโจมตีซ้ำซ้อน ในการโจมตีซ้ำซ้อน ศัตรูพยายามใช้โทเค็นที่ดักจับได้ก่อนหน้านี้อีกครั้ง การอ้างสิทธิ์ "iat" ช่วยให้ตรวจจับการโจมตีดังกล่าวได้โดยการอนุญาตให้ฝ่ายที่พึ่งพิงกำหนดหน้าต่างยอมรับสำหรับอายุของโทเค็น โทเค็นที่อยู่นอกหน้าต่างนี้จะถือว่าไม่ถูกต้อง
  3. การบังคับใช้นโยบายการใช้โทเค็น: แอปพลิเคชันมักจะกำหนดนโยบายเกี่ยวกับอายุของ ID token ที่ยอมรับได้สูงสุดด้วยเหตุผลด้านความปลอดภัย การอ้างสิทธิ์ "iat" ช่วยให้ฝ่ายที่พึ่งพิงสามารถบังคับใช้นโยบายเหล่านี้ เพื่อให้มั่นใจว่าโทเค็นถูกใช้ภายในระยะเวลาที่กำหนดไว้ ซึ่งช่วยลดความเสี่ยงที่เกิดจากการใช้โทเค็นที่ล้าสมัย
  4. รองรับการยกเลิกโทเค็น: ในบางสถานการณ์ เซิร์ฟเวอร์การอนุญาตอาจจำเป็นต้องยกเลิกโทเค็นที่ออกแล้ว การอ้างสิทธิ์ "iat" เป็นเครื่องมือที่สำคัญในกระบวนการยกเลิกโทเค็นโดยแสดง timestamp ที่ชัดเจนว่าโทเค็นถูกออกเมื่อไร มันทำให้การระบุและยกเลิกโทเค็นเฉพาะเจาะจงง่ายขึ้นตามเวลาออก

แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการการอ้างสิทธิ์ “iat”

  • ตรวจสอบการอ้างสิทธิ์ "iat": ฝ่ายที่พึ่งพิงควรตรวจสอบการอ้างสิทธิ์ "iat" เสมอเพื่อให้แน่ใจว่ามันอยู่ในช่วงที่ยอมรับได้ ช่วงเวลานี้อาจแตกต่างกันไปขึ้นอยู่กับข้อกำหนดความปลอดภัยเฉพาะของแอปพลิเคชัน
  • พิจารณา clock skew: อนุญาตให้มีการเบี่ยงเบนของนาฬิกาเมื่อเปรียบเทียบ timestamp "iat" กับเวลาปัจจุบัน การเบี่ยงเบนของนาฬิกาช่วยบัญญัติความแตกต่างเวลาที่อาจเกิดขึ้นระหว่างเซิร์ฟเวอร์การอนุญาตและฝ่ายที่พึ่งพิง
  • ตั้งค่านโยบายการหมดอายุของโทเค็น: ใช้การอ้างสิทธิ์ "iat" ควบคู่ไปกับการอ้างสิทธิ์ "exp" (เวลาหมดอายุ) เพื่อบังคับใช้นโยบายการใช้โทเค็นที่ครบถ้วน ซึ่งช่วยเพิ่มความมั่นคงปลอดภัยโดยรวมของแอปพลิเคชัน

การแก้ไขปัญหา

ตอนนี้ สาเหตุรากของข้อผิดพลาดที่โจ่งแจ้ง "Invalid issued at time" เกือบจะชัดเจนแล้ว

เพื่อบรรเทาการโจมตีซ้ำซ้อนและพิจารณาการเบี่ยงเบนของนาฬิกา Logto เคยตั้งค่าหน้าต่างยอมรับเวลาสำหรับ ID token ไว้ที่ 60 วินาที ฝ่ายที่พึ่งพิงใด ๆ ที่มีความแตกต่างเวลามากกว่า 60 วินาทีจากเวลาของโลกควรจะถูกพิจารณาว่าอาจจะอยู่ในความเสี่ยงและจะไม่ผ่านการตรวจสอบ ID token ดังนั้นข้อผิดพลาด “Invalid token at time”

อย่างไรก็ตาม ในโลกจริง การเบี่ยงเบนของนาฬิกาเกิดขึ้น บางครั้งคอมพิวเตอร์ของคุณไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์เวลาของโลกเพื่อซิงก์เวลาคอมพิวเตอร์ บางครั้งเซิร์ฟเวอร์การอนุญาตก็ตกหลุดจากการซิงก์ บางครั้งที่แย่กว่านั้น ทั้งสองฝ่ายไม่ได้ซิงก์

ยิ่งไปกว่านั้น ในสถานการณ์ SSO ความแตกต่างของเวลาระหว่างไคลเอ็นต์ต่างๆ และผู้ให้บริการ SSO สามารถมากขึ้นได้

วิธีแก้ไข

เพื่อบรรเทาความเจ็บปวดและพิจารณามาตรการด้านความปลอดภัย Logto ได้เพิ่มความยืดหยุ่นการยอมรับ "iat" จาก 60 วินาทีเป็น 5 นาทีสำหรับการรับรองความถูกต้องนอก SSO และ 10 นาทีสำหรับสถานการณ์ SSO

ในขณะเดียวกัน คุณสามารถตรวจสอบเวลาคอมพิวเตอร์ของคุณได้ว่าซิงก์กับโลกด้วยการใช้เครื่องมือเช็คเวลา https://time.is ซิงก์เวลาของคุณด้วยตนเองหรือเปลี่ยนไปใช้เซิร์ฟเวอร์เวลาอื่น เพื่อให้ความแตกต่างของเวลามั่นใจอยู่ในหน้าต่างยอมรับของเราเสมอ

สรุป

การอ้างสิทธิ์ "iat" ใน ID tokens เป็นองค์ประกอบที่สำคัญสำหรับการเสริมสร้างความปลอดภัยของการจัดการข้อมูลประจำตัวและการเข้าถึงในแอปพลิเคชันสมัยใหม่ การผสานแนวทางปฏิบัติที่ดีที่สุดในการจัดการการอ้างสิทธิ์ "iat" ช่วยให้กระบวนการยืนยันตัวตนมีความแข็งแกร่งและปลอดภัย

นอกจากนี้ ให้แน่ใจว่าเวลาคอมพิวเตอร์ของคุณถูกซิงก์กับเซิร์ฟเวอร์เวลาของโลกเสมอ