ข้ามไปยังเนื้อหาหลัก

อุปกรณ์ที่เชื่อถือได้สำหรับ MFA

อุปกรณ์ที่เชื่อถือได้สำหรับ MFA ช่วยให้ผู้ใช้ข้ามการยืนยัน MFA ซ้ำ ๆ บนเบราว์เซอร์ที่พวกเขาไว้วางใจ หลังจากการยืนยัน MFA หรือการตั้งค่าที่เข้าเงื่อนไข ผู้ใช้สามารถเลือกเชื่อถือเบราว์เซอร์บนหน้า เชื่อถืออุปกรณ์นี้ (Trust this device) แยกต่างหากในขั้นตอนสุดท้ายของการลงชื่อเข้าใช้หรือสมัครสมาชิก Logto จะจัดเก็บข้อมูลรับรองที่มีอายุจำกัดไว้ในคุกกี้ first-party ในการลงชื่อเข้าใช้ครั้งถัดไป หากข้อมูลรับรองยังถูกต้อง จะสามารถข้ามขั้นตอนการยืนยัน MFA ได้โดยไม่ต้องมีการโต้ตอบจากผู้ใช้

อุปกรณ์ที่เชื่อถือได้ไม่ใช่ปัจจัย MFA ใหม่ และไม่เปลี่ยนแปลงเมื่อ Logto ต้องการ MFA อุปกรณ์นี้สามารถใช้ได้เฉพาะขั้นตอน MFA ใน flow การลงชื่อเข้าใช้เท่านั้น ไม่สามารถใช้แทนการยืนยันตัวตน (identity verification) การยืนยันล่าสุด (recent verification) การกู้คืนบัญชี (account recovery) การจัดการปัจจัย MFA หรือการดำเนินการที่สำคัญอื่น ๆ ของบัญชี

อุปกรณ์ที่เชื่อถือได้ทำงานอย่างไร​

เมื่อการลงชื่อเข้าใช้ถึงขั้นตอนการยืนยัน MFA Logto จะ:

  1. ประเมินนโยบาย MFA ที่มีอยู่เพื่อพิจารณาว่าต้องใช้ MFA หรือไม่
  2. ตรวจสอบว่าได้เปิดใช้งานอุปกรณ์ที่เชื่อถือได้สำหรับ tenant และได้รับอนุญาตจากทุกองค์กรที่ผู้ใช้สังกัดอยู่หรือไม่
  3. ตรวจสอบคุกกี้ของเบราว์เซอร์กับข้อมูลบันทึกฝั่งเซิร์ฟเวอร์ที่ใช้งานอยู่สำหรับผู้ใช้ที่ระบุ
  4. ดำเนินการ MFA อัตโนมัติเมื่อข้อมูลรับรองถูกต้อง หากไม่ถูกต้อง Logto จะลบข้อมูลรับรองที่ไม่ถูกต้องและดำเนินการ MFA แบบปกติต่อ

เชื่อถืออุปกรณ์ระหว่างลงชื่อเข้าใช้หรือสมัครสมาชิก​

ประสบการณ์การลงชื่อเข้าใช้แบบ built-in จะแสดงหน้า เชื่อถืออุปกรณ์นี้ (Trust this device) แยกต่างหากในขั้นตอนสุดท้ายของ flow การลงชื่อเข้าใช้หรือสมัครสมาชิกที่เข้าเงื่อนไข หลังจากกรอกโปรไฟล์และขั้นตอน MFA ที่จำเป็น การเชื่อถือเบราว์เซอร์เป็นการเลือกโดยชัดเจนในหน้านี้ แยกจากการยืนยันหรือการตั้งค่า MFA

หน้าดังกล่าวจะแสดงเฉพาะเมื่อเปิดใช้งานอุปกรณ์ที่เชื่อถือได้สำหรับ tenant ได้รับอนุญาตจากทุกองค์กรที่ผู้ใช้สังกัดอยู่ และการโต้ตอบปัจจุบันมีหลักฐาน MFA ที่เข้าเงื่อนไขดังนี้:

  • การยืนยัน MFA สำเร็จด้วยแอป authenticator OTP, passkey (WebAuthn), รหัสยืนยันอีเมล หรือรหัสยืนยัน SMS ที่เปิดใช้งาน
  • การผูกแอป authenticator หรือ passkey สำเร็จระหว่างการตั้งค่า MFA รวมถึงการตั้งค่าระหว่างสมัครสมาชิก

หน้าดังกล่าวจะไม่แสดงระหว่างการรีเซ็ตรหัสผ่าน หรือเมื่อไม่มีหลักฐาน MFA ที่เข้าเงื่อนไข การยืนยันด้วยรหัสสำรอง (backup code) หรือมีเพียงข้อมูลรับรองอุปกรณ์ที่เชื่อถือได้เดิมจะไม่เข้าเงื่อนไข ดังนั้นหน้าดังกล่าวจะไม่แสดงทุกครั้งที่ลงชื่อเข้าใช้หรือสมัครสมาชิก การเลือก ข้าม (Skip) ก่อนหน้านี้ก็สามารถระงับการแสดงหน้านี้ได้เช่นกัน ตามรายละเอียดด้านล่าง

ในหน้านี้ ผู้ใช้สามารถเลือก:

  • เชื่อถืออุปกรณ์นี้เป็นเวลา N วัน (Trust this device for N days): เลือกเข้าร่วมตามระยะเวลาที่กำหนด Logto จะสร้างข้อมูลบันทึกอุปกรณ์ที่เชื่อถือได้และคุกกี้ข้อมูลรับรองหลังจากการโต้ตอบสำเร็จเท่านั้น
  • ข้าม (Skip): ดำเนินการต่อโดยไม่สร้างอุปกรณ์ที่เชื่อถือได้ การข้ามหน้านี้ไม่ใช่การข้ามการยืนยันหรือการตั้งค่า MFA ที่จำเป็น

เมื่อผู้ใช้เลือก ข้าม (Skip) Logto จะจัดเก็บคุกกี้ opt-out แยกต่างหากที่ผูกกับ tenant และผู้ใช้ในเบราว์เซอร์ปัจจุบัน อายุของคุกกี้นี้จะเท่ากับระยะเวลา trust ที่กำหนดขณะข้าม ตราบใดที่เบราว์เซอร์ยังมีคุกกี้นี้ การลงชื่อเข้าใช้ครั้งถัดไปจะไม่แสดงหน้านี้อีก หลังจากหมดอายุหรือถูกลบ flow ที่เข้าเงื่อนไขในภายหลังสามารถแสดงหน้านี้ได้อีก คุกกี้ opt-out นี้ไม่ได้ให้ความเชื่อถืออุปกรณ์หรือข้าม MFA

การเชื่อถืออุปกรณ์หลังจากเลือกข้าม:

หากผู้ใช้เลือก ข้าม (Skip) แล้วต้องการเชื่อถือเบราว์เซอร์ปัจจุบันในภายหลัง วิธีที่แนะนำคือ ลบคุกกี้ opt-out ที่เกี่ยวข้องสำหรับโดเมน Logto ผ่านการตั้งค่าคุกกี้ของเบราว์เซอร์หรือ developer tools โดยชื่อจะขึ้นต้นด้วย __Host-logto-device-trust-opt-out-

หรือจะลบคุกกี้ทั้งหมดสำหรับโดเมน Logto ก็ได้

หลังจากนั้น ให้ลงชื่อเข้าใช้อีกครั้ง ดำเนินการยืนยันหรือการตั้งค่า MFA ที่เข้าเงื่อนไข แล้วเลือก เชื่อถืออุปกรณ์นี้เป็นเวลา N วัน (Trust this device for N days) เมื่อหน้าดังกล่าวปรากฏ

การสร้างอุปกรณ์ที่เชื่อถือได้และการอัปเดต metadata หลังลงชื่อเข้าใช้เป็นแบบ best effort ดังนั้นหากล้มเหลวจะไม่ทำให้การยืนยันตัวตนที่สำเร็จอยู่แล้วล้มเหลว

กำหนดนโยบายอุปกรณ์ที่เชื่อถือได้​

นโยบายระดับโกลบอล​

ไปที่ Console > Multi-factor authentication และกำหนดค่า อุปกรณ์ที่เชื่อถือได้ (Trusted devices):

  • เปิดหรือปิดอุปกรณ์ที่เชื่อถือได้สำหรับ tenant โดยค่าเริ่มต้นจะปิดไว้
  • กำหนดระยะเวลา trust เป็นจำนวนเต็มระหว่าง 1 ถึง 365 วัน ค่าเริ่มต้นคือ 30 วัน

ระยะเวลาจะถูกกำหนดคงที่เมื่อสร้างอุปกรณ์ที่เชื่อถือได้ การใช้งานอุปกรณ์จะไม่ขยายเวลาหมดอายุ และการเปลี่ยนแปลงระยะเวลาจะมีผลเฉพาะอุปกรณ์ที่สร้างใหม่เท่านั้น

การปิดนโยบายโกลบอลจะป้องกันไม่ให้อุปกรณ์ที่เชื่อถือได้ที่มีอยู่ใช้ MFA ได้ แต่จะไม่ลบข้อมูลบันทึก หากเปิดใช้งานอีกครั้ง ข้อมูลที่ยังไม่หมดอายุหรือยังไม่ถูกลบจะกลับมาใช้งานได้

ข้อจำกัดระดับองค์กร​

องค์กรสามารถอนุญาตหรือไม่อนุญาตให้อุปกรณ์ที่เชื่อถือได้ใช้กับสมาชิกของตนได้ การตั้งค่านี้จะเข้มงวดกว่านโยบายระดับ tenant เท่านั้น:

  • องค์กรไม่สามารถเปิดใช้งานอุปกรณ์ที่เชื่อถือได้หากนโยบายโกลบอลถูกปิด
  • หากองค์กรใด ๆ ที่ผู้ใช้สังกัดอยู่ไม่อนุญาตให้อุปกรณ์ที่เชื่อถือได้ ข้อมูลรับรองของผู้ใช้จะไม่สามารถใช้ MFA ได้ ไม่ว่าองค์กรนั้นจะต้องการ MFA หรือไม่ก็ตาม
  • องค์กรไม่มีระยะเวลา trust แยกต่างหาก จะใช้ระยะเวลาโกลบอล

การไม่อนุญาตให้อุปกรณ์ที่เชื่อถือได้สำหรับองค์กรจะระงับการใช้งานสำหรับสมาชิกที่ได้รับผลกระทบ แต่จะไม่ลบข้อมูลบันทึก และไม่ป้องกันผู้ใช้หรือผู้ดูแลระบบจากการแสดงรายการหรือลบอุปกรณ์

การนำอุปกรณ์ที่เชื่อถือได้กลับมาใช้ซ้ำต้องอาศัยบริบทของเบราว์เซอร์ที่เก็บและส่งคืนคุกกี้ first-party แบบถาวรสำหรับ endpoint ของ Logto เดียวกัน ซึ่งหมายถึงโปรไฟล์เบราว์เซอร์ ไม่ใช่อุปกรณ์จริง

WebView, system browser, custom tab, โหมดความเป็นส่วนตัว, เบราว์เซอร์ที่ปิดคุกกี้ และบริบทชั่วคราวอื่น ๆ สามารถใช้อุปกรณ์ที่เชื่อถือได้เฉพาะเมื่อ cookie store ของพวกเขาเก็บข้อมูลรับรองไว้ หากคุกกี้ไม่พร้อมใช้งานในการลงชื่อเข้าใช้ครั้งถัดไป Logto จะดำเนินการ MFA แบบปกติแทนที่จะล้มเหลวในการยืนยันตัวตน เบราว์เซอร์ โปรไฟล์เบราว์เซอร์ โดเมน Logto tenant และผู้ใช้ที่ต่างกันจะไม่แชร์ข้อมูลรับรองอุปกรณ์ที่เชื่อถือได้

บันทึก:

Logto ไม่ใช้ browser fingerprinting หรือพยายามตรวจสอบล่วงหน้าว่า client จะเก็บคุกกี้หรือไม่ แอป native และ flow การลงชื่อเข้าใช้แบบ custom ควรถือว่าการสร้างอุปกรณ์ที่เชื่อถือได้เป็นแบบ best effort และควรมี flow MFA แบบปกติสำรองไว้เสมอ

จัดการอุปกรณ์ที่เชื่อถือได้​

จะแสดงเฉพาะข้อมูลบันทึกที่ยังไม่หมดอายุ (expiresAt อยู่ในอนาคต) ชื่ออุปกรณ์จะได้มาจาก user agent ล่าสุด ข้อมูลประเทศและเมืองเป็น metadata โดยประมาณจาก context ของ request ล่าสุด จะไม่มีการแสดงหรือส่งคืน IP address ดิบผ่าน public API

การจัดการโดยผู้ดูแลระบบ​

ใน Console > User management เปิดผู้ใช้เพื่อดูและลบอุปกรณ์ที่เชื่อถือได้ การลบอุปกรณ์ที่เชื่อถือได้จะมีผลกับการลงชื่อเข้าใช้ในอนาคตเท่านั้น ไม่ได้ยุติ session ที่ใช้งานอยู่ของผู้ใช้

คุณยังสามารถใช้ Management API ได้ดังนี้:

  • GET /api/users/{userId}/trusted-devices แสดงรายการอุปกรณ์ที่เชื่อถือได้ที่ยังใช้งานอยู่ทั้งหมดของผู้ใช้
  • DELETE /api/users/{userId}/trusted-devices/{trustedDeviceId} ลบอุปกรณ์ที่เชื่อถือได้หนึ่งรายการที่ผู้ใช้เป็นเจ้าของ

ผลลัพธ์ของรายการจะมี id, userAgent, country, city, createdAt, lastUsedAt และ expiresAt

curl https://[tenant-id].logto.app/api/users/[user-id]/trusted-devices \
-H "Authorization: Bearer [management-api-access-token]"

curl -X DELETE \
https://[tenant-id].logto.app/api/users/[user-id]/trusted-devices/[trusted-device-id] \
-H "Authorization: Bearer [management-api-access-token]"

เรียนรู้วิธี การยืนยันตัวตนกับ Management API

การจัดการด้วยตนเองผ่าน Account Center​

ใน Console > Sign-in & account > Account center กำหนดค่า field อุปกรณ์ที่เชื่อถือได้ (Trusted devices):

  • ปิด (Off): ผู้ใช้ไม่สามารถแสดงรายการหรือลบอุปกรณ์ที่เชื่อถือได้
  • อ่านอย่างเดียว (Read-only): ผู้ใช้สามารถแสดงรายการอุปกรณ์ที่เชื่อถือได้แต่ไม่สามารถลบได้
  • แก้ไข (Edit): ผู้ใช้สามารถแสดงรายการและลบอุปกรณ์ที่เชื่อถือได้

Account Center ที่สร้างไว้ล่วงหน้าจะแสดงอุปกรณ์ที่เชื่อถือได้ที่ยังใช้งานอยู่ในหน้าความปลอดภัย และจะระบุเบราว์เซอร์ปัจจุบันเมื่อข้อมูลรับรองคุกกี้สมบูรณ์ การลบเบราว์เซอร์ปัจจุบันจะลบคุกกี้อุปกรณ์ที่เชื่อถือได้แต่ยังคง session การเข้าสู่ระบบปัจจุบันไว้ การลบบันทึกของเบราว์เซอร์อื่นจะไม่สามารถลบคุกกี้ของเบราว์เซอร์นั้นได้ทันที คุกกี้ที่หมดอายุจะถูกปฏิเสธและลบเมื่อถูกส่งมาในครั้งถัดไป

สำหรับ Account Center แบบ custom ให้ขอ scope urn:logto:scope:trusted_devices และใช้ Account API พร้อมข้อมูลยืนยันตัวตนที่ถูกต้อง:

  • GET /api/my-account/trusted-devices แสดงรายการอุปกรณ์ที่เชื่อถือได้ที่ยังใช้งานอยู่ของผู้ใช้ที่ลงชื่อเข้าใช้ และเพิ่ม isCurrent ในแต่ละรายการ
  • DELETE /api/my-account/trusted-devices/{trustedDeviceId} ลบอุปกรณ์ที่เชื่อถือได้หนึ่งรายการที่ผู้ใช้เป็นเจ้าของ การลบนี้ใช้ได้เฉพาะกับแอป first-party
curl https://[tenant-id].logto.app/api/my-account/trusted-devices \
-H "Authorization: Bearer [account-api-access-token]" \
-H "logto-verification-id: [verification-record-id]"

curl -X DELETE \
https://[tenant-id].logto.app/api/my-account/trusted-devices/[trusted-device-id] \
-H "Authorization: Bearer [account-api-access-token]" \
-H "logto-verification-id: [verification-record-id]"

ดู Account API reference และ คู่มือการยืนยันความปลอดภัย สำหรับ flow การอนุญาตและการยืนยัน

โมเดลความปลอดภัย​

ข้อมูลรับรองอุปกรณ์ที่เชื่อถือได้เป็นโทเค็นทึบ (opaque token) แบบ bearer ที่มีสองส่วน: รหัสบันทึก (record ID) และ secret แบบสุ่ม 32 ไบต์ที่เข้ารหัสอย่างปลอดภัย

  • ใน production Logto จะเก็บไว้ในคุกกี้ host-only ที่มี prefix __Host- พร้อม attribute HttpOnly, Secure, SameSite=Lax และ Path=/ JavaScript ของแอปไม่สามารถอ่านได้
  • เซิร์ฟเวอร์จะเก็บเฉพาะ SHA-256 hash ของ secret และเปรียบเทียบข้อมูลรับรองด้วยการตรวจสอบแบบ timing-safe
  • ทุกการค้นหาข้อมูลรับรองจะถูกจำกัดด้วย tenant และผู้ใช้ และต้องการ expiresAt ที่ยังไม่หมดอายุ
  • เวลาหมดอายุถูกกำหนดคงที่ตั้งแต่สร้าง การล้างข้อมูลที่หมดอายุจะเกิดขึ้นในภายหลัง แต่เวลา cleanup ไม่ถูกใช้เป็นกลไกความปลอดภัย
  • การลบโดยตรงจะลบบันทึกฝั่งเซิร์ฟเวอร์ทันที คุกกี้ที่ถูกคัดลอกหรือหมดอายุจะไม่ผ่านการตรวจสอบหลังจากบันทึกถูกลบ

secret และ hash ของข้อมูลรับรองจะไม่ถูกเปิดเผยผ่าน UI, public API, audit log หรือ webhook รหัสอุปกรณ์สาธารณะไม่ใช่ตัวระบุอุปกรณ์จริงและไม่เพียงพอสำหรับการยืนยันตัวตน เนื่องจากคุกกี้เป็น bearer credential การคัดลอกคุกกี้สมบูรณ์จะสามารถนำไปใช้ซ้ำกับ tenant และผู้ใช้เดียวกันจนกว่าบันทึกจะหมดอายุหรือถูกลบ อุปกรณ์ที่เชื่อถือได้ไม่ได้ให้การรับรองอุปกรณ์ที่มีฮาร์ดแวร์รองรับ

บันทึกการตรวจสอบ (Audit logs) และ Webhook​

บันทึกการตรวจสอบเฉพาะอุปกรณ์ที่เชื่อถือได้ประกอบด้วย:

  • TrustedDevice.Created: มีการสร้างบันทึกอุปกรณ์ที่เชื่อถือได้และคุกกี้ข้อมูลรับรองหลังจากการโต้ตอบสำเร็จ
  • TrustedDevice.Used: ข้อมูลรับรองอุปกรณ์ที่เชื่อถือได้ถูกใช้ยืนยัน MFA และการลงชื่อเข้าใช้สำเร็จ

คุณสามารถสมัครรับ webhook การเปลี่ยนแปลงข้อมูลเหล่านี้ได้:

  • TrustedDevice.Created: มีการสร้างบันทึกอุปกรณ์ที่เชื่อถือได้
  • TrustedDevice.Deleted: ผู้ใช้หรือผู้ดูแลระบบลบบันทึกอุปกรณ์ที่เชื่อถือได้

ข้อมูล event จะมี id, userId และ expiresAt ของอุปกรณ์ที่เชื่อถือได้ ไม่รวมคุกกี้ข้อมูลรับรอง, secret hash และ request IP ไม่มี webhook สำหรับการใช้งานสำเร็จเพื่อหลีกเลี่ยงปริมาณ event สูง และการเปลี่ยนนโยบายจะไม่สร้าง event วงจรชีวิตอุปกรณ์ที่เชื่อถือได้เพราะไม่ได้เปลี่ยนแปลงข้อมูลบันทึก

การหมดอายุโดยธรรมชาติจะไม่มี webhook TrustedDevice.Expired การหมดอายุเกิดขึ้นเมื่อเวลาผ่านไป ไม่ใช่เมื่อมีการเปลี่ยนแปลงข้อมูลในแอป และการล้างข้อมูลจริงอาจเกิดขึ้นภายหลัง ใช้ค่า expiresAt จาก TrustedDevice.Created หาก integration ของคุณต้องการคำนวณเวลาหมดอายุที่คาดไว้

การหมดอายุโดยธรรมชาติจะไม่สร้างบันทึกการตรวจสอบเฉพาะอุปกรณ์ที่เชื่อถือได้

ดู ประเภท event ของ audit log และ event ของ webhook สำหรับรายการ event

หมายเหตุเกี่ยวกับวงจรชีวิต​

  • การลงชื่อออกปกติจะไม่ลบอุปกรณ์ที่เชื่อถือได้
  • การเพิ่ม ลบ หรือรีเซ็ตปัจจัย MFA จะไม่ลบอุปกรณ์ที่เชื่อถือได้
  • การลบอุปกรณ์ที่เชื่อถือได้จะไม่ยุติ session ที่ใช้งานอยู่
  • การลบผู้ใช้จะลบบันทึกอุปกรณ์ที่เชื่อถือได้ผ่านวงจรชีวิตข้อมูลผู้ใช้
  • ไม่มีการจำกัดจำนวนอุปกรณ์ที่เชื่อถือได้หรือการลบอัตโนมัติ