การออกจากระบบ
การออกจากระบบใน Logto มี 2 ชั้น:
- การออกจากระบบเซสชัน Logto: ยุติเซสชันการลงชื่อเข้าใช้แบบศูนย์กลางภายใต้โดเมน Logto
- การออกจากระบบแอป: ล้างสถานะเซสชันและโทเค็นในแอปพลิเคชันฝั่งไคลเอนต์ของคุณ
เพื่อเข้าใจการทำงานของเซสชันใน Logto มากขึ้น ดูที่ เซสชัน
กลไกการออกจากระบบ
1) ออกจากระบบเฉพาะฝั่งไคลเอนต์
แอปไคลเอนต์จะล้างเซสชันและโทเค็น (โทเค็น ID / การเข้าถึง / รีเฟรช) ของตัวเอง นี่จะเป็นการออกจากระบบเฉพาะสถานะภายในแอปนั้น
- เซสชัน Logto อาจยังคงใช้งานอยู่
- แอปอื่น ๆ ที่อยู่ภายใต้เซสชัน Logto เดียวกันอาจยังคง SSO ได้
2) ยุติเซสชันที่ Logto (ออกจากระบบทั่วทั้งระบบใน Logto เวอร์ชันปัจจุบัน)
เพื่อเคลียร์เซสชัน Logto แบบศูนย์กลาง แอปจะเปลี่ยนเส้นทางผู้ใช้ไปยัง endpoint สำหรับยุติเซสชัน เช่น
https://{your-logto-domain}/oidc/session/end
ในพฤติกรรมของ Logto SDK ปัจจุบัน:
signOut()จะเปลี่ยนเส้นทางไปที่/session/end- จากนั้นจะไปที่
/session/end/confirm - ฟอร์มยืนยันเริ่มต้นจะส่ง
logout=trueอัตโนมัติ
ผลลัพธ์คือ การออกจากระบบของ SDK ปัจจุบันจะถือเป็น การออกจากระบบทั่วทั้งระบบ
- การออกจากระบบทั่วทั้งระบบ: เพิกถอนเซสชัน Logto แบบศูนย์กลาง
เกิดอะไรขึ้นระหว่างการออกจากระบบทั่วทั้งระบบ
ระหว่างการออกจากระบบทั่วทั้งระบบ:
- เซสชัน Logto แบบศูนย์กลางจะถูกเพิกถอน
- grant ที่เกี่ยวข้องกับแอปจะถูกจัดการตามสถานะการอนุญาตของแต่ละแอป:
- ถ้า ไม่ได้ รับสิทธิ์
offline_accessgrant ที่เกี่ยวข้องจะถูกเพิกถอน - ถ้า ได้รับ สิทธิ์
offline_accessgrant จะไม่ถูกเพิกถอนโดย end-session
- ถ้า ไม่ได้ รับสิทธิ์
- ในกรณี
offline_accessโทเค็นรีเฟรชและ grant จะยังคงใช้ได้จนกว่าจะหมดอายุ grant, หมดอายุโทเค็นรีเฟรช หรือถูกเพิกถอนโดยตรง
อายุของ grant และผลกระทบของ offline_access
- ค่าเริ่มต้น TTL ของ grant ใน Logto คือ 180 วัน
- ถ้าได้รับ
offline_accessการยุติเซสชันจะไม่เพิกถอน grant ของแอปนั้นโดยอัตโนมัติ - สายโซ่โทเค็นรีเฟรชที่เกี่ยวข้องกับ grant นั้นจะดำเนินต่อไปได้จนกว่า grant จะหมดอายุ โทเค็นรีเฟรชจะหมดอายุ หรือ grant ถูกเพิกถอนโดยตรง
- สำหรับแอป SPA การหมุนเวียนโทเค็นรีเฟรชจะไม่ขยาย TTL ของโทเค็นรีเฟรช ดังนั้นโทเค็นรีเฟรชอาจหมดอายุก่อน grant
การออกจากระบบแบบ federated: back-channel logout
เพื่อความสอดคล้องข้ามแอป Logto รองรับ back-channel logout
เมื่อผู้ใช้ออกจากระบบจากแอปหนึ่ง Logto สามารถแจ้งทุกแอปที่อยู่ในเซสชันเดียวกันโดยส่ง logout token ไปยัง back-channel logout URI ที่ลงทะเบียนไว้ของแต่ละแอป
ถ้าเปิดใช้งาน Is session required ในการตั้งค่า back-channel ของแอป logout token จะมี sid เพื่อระบุเซสชัน Logto
ลำดับปกติ:
- ผู้ใช้เริ่มออกจากระบบจากแอปหนึ่ง
- Logto ประมวลผล end-session และส่ง logout token ไปยัง back-channel logout URI ที่ลงทะเบียนไว้
- แต่ละแอปตรวจสอบ logout token และล้างเซสชัน / โทเค็นของตัวเอง
วิธีการออกจากระบบใน Logto SDKs
- SPA และเว็บ:
client.signOut()จะล้าง token storage ในเครื่องและเปลี่ยนเส้นทางไปยัง endpoint end-session ของ Logto คุณสามารถระบุ post-logout redirect URI ได้ - Native (รวมถึง React Native / Flutter): โดยปกติจะล้าง token storage ในเครื่องเท่านั้น webview แบบไม่มีเซสชันหมายถึงไม่มี cookie ของ Logto ในเบราว์เซอร์ให้ลบ
สำหรับแอป native ที่ไม่รองรับ webview แบบไม่มีเซสชัน หรือไม่รู้จักการตั้งค่า emphasized (แอป Android ที่ใช้ React Native หรือ Flutter SDK) คุณสามารถบังคับให้ผู้ใช้ต้องลงชื่อเข้าใช้อีกครั้งโดยใส่พารามิเตอร์ prompt=login ในคำขอการอนุญาต
บังคับยืนยันตัวตนใหม่ทุกครั้งที่เข้าใช้งาน
สำหรับการดำเนินการที่ต้องการความปลอดภัยสูง ให้ใส่ prompt=login ในคำขอ auth เพื่อข้าม SSO และบังคับให้กรอกข้อมูลรับรองทุกครั้ง
หากขอ offline_access (เพื่อรับโทเค็นรีเฟรช) ให้ใส่ consent ด้วย เช่น prompt=login consent
ตัวอย่างการตั้งค่ารวม:
prompt=login consent
คำถามที่พบบ่อย
ฉันไม่ได้รับการแจ้งเตือน back-channel logout
- ตรวจสอบว่า back-channel logout URI ได้ลงทะเบียนอย่างถูกต้องใน Logto dashboard
- ตรวจสอบว่าแอปของคุณมีสถานะลงชื่อเข้าใช้สำหรับผู้ใช้ / เซสชันเดียวกัน
แหล่งข้อมูลที่เกี่ยวข้อง
ทำความเข้าใจ OIDC back-channel logout