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

อุปกรณ์ที่เชื่อถือได้สำหรับ 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 ที่ใช้งานอยู่
  • การลบผู้ใช้จะลบบันทึกอุปกรณ์ที่เชื่อถือได้ผ่านวงจรชีวิตข้อมูลผู้ใช้
  • ไม่มีการจำกัดจำนวนอุปกรณ์ที่เชื่อถือได้หรือการลบอัตโนมัติ