• OIDC
  • SSO
  • authentication

การใช้งาน OIDC logout และการจัดการ session: คู่มือที่สมบูรณ์

สำรวจการรับรองความถูกต้องของ OIDC และการจัดการเซสชันอย่างลึกซึ้ง เรียนรู้วิธีการใช้งาน OIDC RP-initiated, IdP-initiated และ back-channel logout สำหรับการจัดการเซสชันที่ปลอดภัย

Simeng
Simeng
Developer

การจัดการเซสชัน OIDC คืออะไร

OpenID Connect (OIDC) เป็นเลเยอร์ตรวจสอบตัวตนที่เรียบง่ายซึ่งสร้างขึ้นบนโปรโตคอล OAuth 2.0 ช่วยให้ลูกค้าตรวจสอบตัวตนของผู้ใช้สุดท้ายจากการรับรองความถูกต้องที่ดำเนินการโดยเซิร์ฟเวอร์การอนุญาต รวมถึงการรับข้อมูลโปรไฟล์พื้นฐานเกี่ยวกับผู้ใช้สุดท้ายในลักษณะที่สามารถทำงานร่วมกันได้และคล้ายกับ REST

OIDC ถูกออกแบบมาให้ง่ายต่อการใช้งานและการดำเนินงาน โดยเน้นความเรียบง่ายและความยืดหยุ่น มันถูกใช้กันอย่างแพร่หลายสำหรับการล็อกอินเพียงครั้งเดียว (SSO) และการตรวจสอบตัวตนในแอปพลิเคชันเว็บ แอปบนมือถือ และ API

การเข้าใจสถานะการรับรองความถูกต้องและการจัดการเซสชันใน OIDC มีความสำคัญ บทความนี้อธิบายว่าเซสชัน OIDC และสถานะการรับรองความถูกต้องของผู้ใช้ถูกจัดการในบริบทของการโต้ตอบระหว่าง ผู้จัดหาตัวตน (IdP) และฝ่ายพึ่งพา (RP) หรือ ผู้ให้บริการ (SP)

บทความนี้มีคำศัพท์ที่สำคัญหลายคำ

  • ผู้จัดหาตัวตน (IdP): บริการที่จัดเก็บและตรวจสอบตัวตนของผู้ใช้
  • ผู้ให้บริการ (SP) หรือ ฝ่ายการโอน( RP): แอปพลิเคชันเว็บหรือบริการที่ให้บริการแก่ผู้ใช้และพึ่งพา IdP สำหรับการรับรองความถูกต้องของผู้ใช้
  • เซสชันล็อกอิน หรือ เซสชันการรับรองความถูกต้อง: เซสชันที่ตั้งขึ้นเมื่อผู้ใช้ล็อกอินสู่ IdP
  • การรับรอง: ข้อมูลการรับรองและการอนุญาตของผู้ใช้ที่ถูกสร้างและจัดการโดย IdP
  • ล็อกอินเพียงครั้งเดียว (SSO): บริการเซสชันและการรับรองความถูกต้องของผู้ใช้ที่อนุญาตให้ผู้ใช้ใช้ชุดข้อมูลล็อกอินเดียว (เช่น ชื่อและรหัสผ่าน) เพื่อเข้าถึงแอปพลิเคชันหลายรายการ

การทำงานของการรับรองความถูกต้อง OIDC เป็นอย่างไร

เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับการจัดการเซสชันและสถานะการรับรองความถูกต้องของผู้ใช้ใน OIDC ลองทบทวนการทำงานของการรับรองความถูกต้อง OIDC สำหรับแอปพลิเคชันเว็บ:

  1. ผู้ใช้เข้าถึงเว็บแอปพลิเคชัน (RP)
  2. RP เปลี่ยนเส้นทางผู้ใช้ไปยังผู้จัดหาตัวตน OIDC (IdP) เพื่อการรับรองความถูกต้อง
  3. ผู้จัดหาตัวตน OIDC ตรวจสอบสถานะเซสชันล็อกอินของผู้ใช้ หากไม่มีเซสชันหรือเซสชันหมดอายุ ผู้ใช้จะได้รับการแจ้งเตือนให้ล็อกอิน
  4. ผู้ใช้โต้ตอบกับหน้าล็อกอินเพื่อรับรองความถูกต้อง
  5. หน้าล็อกอินส่งผลการโต้ตอบไปยังผู้จัดหาตัวตน OIDC
  6. ผู้จัดหาตัวตน OIDC สร้างเซสชันล็อกอินและการรับรองการรับรองใหม่สำหรับผู้ใช้
  7. ผู้จัดหาตัวตน OIDC เปลี่ยนเส้นทางผู้ใช้กลับไปยัง RP พร้อมรหัสการรับรองความถูกต้อง (Authorization Code flow)
  8. RP รับรหัสการรับรองความถูกต้องและแลกมันเป็นโทเค็นสำหรับเข้าถึงข้อมูลผู้ใช้

การจัดการเซสชันล็อกอิน RP คืออะไร

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

คุกกี้เซสชันจะถูกตั้งอย่างปลอดภัยในเบราว์เซอร์ของผู้ใช้เพื่อรักษาสถานะเซสชัน คุกกี้เซสชันจะถูกใช้สำหรับระบุเซสชันของผู้ใช้และรับรองความถูกต้องของผู้ใช้สำหรับคำขอการรับรองความถูกต้องต่อไป ปกติแล้ว คุกกี้นี้จะถูกตั้งด้วยแฟลก HttpOnly และ Secure เพื่อป้องกันการเข้าถึงจากฝั่งลูกค้าและเพื่อให้มั่นใจการสื่อสารที่ปลอดภัย

เซสชันเดียวสำหรับ RP เดียว

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

เซสชันศูนย์รวมสำหรับ RP หลายรายการ

การจัดการเซสชันศูนย์รวมนี้ยังช่วยให้ IdP รักษาสถานะการรับรองความถูกต้องที่สม่ำเสมอผ่าน RP หลายรายการตราบใดที่เซสชันของผู้ใช้ยังคงใช้งานได้และคำขอการรับรองความถูกต้องมาจากผู้ใช้รายเดียวกัน (อุปกรณ์/เบราว์เซอร์) กลไกนี้เปิดใช้งานคุณสมบัติ SSO ซึ่งผู้ใช้สามารถเข้าถึง RP หลายรายการได้โดยไม่ต้องล็อกอินใหม่

สถานะการรับรองความถูกต้องฝั่งลูกค้า

ใน OIDC แอปพลิเคชันลูกค้า (RP) พึ่งพาโทเค็นที่ออกโดย IdP เพื่อยืนยันตัวตนของผู้ใช้และสถานะการรับรองความถูกต้องหรือการอนุญาต "เซสชันล็อกอิน" ที่ฝั่งลูกค้าจะถูกรักษาโดยโทเค็นที่ออกโดย IdP

  • ID Token: โทเค็นอายุสั้นที่มีข้อมูลของผู้ใช้และใช้ยืนยันตัวตนของผู้ใช้ที่ได้รับการรับรองความถูกต้อง
  • Access Token: โทเค็นที่ให้สิทธิ์เข้าถึงทรัพยากรที่ได้รับการป้องกันในนามของผู้ใช้ ช่วงเวลาอายุของโทเค็นสามารถมีอายุสั้นหรือยาว ขึ้นอยู่กับการตั้งค่า แอปพลิเคชันลูกค้าอาจพึ่งพาความถูกต้องของโทเค็นการเข้าถึงเพื่อกำหนดสถานะการรับรองความถูกต้องของผู้ใช้ หากโทเค็นการเข้าถึงหมดอายุหรือถูกลบ ผู้ใช้อาจถูกพิจารณาว่า "ออกจากระบบ" หรือ "ไม่ได้รับการรับรองความถูกต้อง" และจำเป็นต้องทำการรับรองความถูกต้องใหม่
  • Refresh Token: หากการร้องขอขอบเขต offline_access และได้รับการอนุญาต แอปพลิเคชันลูกค้าอาจได้รับโทเค็นการรีเฟรช มันให้วิธีในการขยายสถานะการรับรองความถูกต้องของผู้ใช้โดยไม่จำเป็นต้องให้ผู้ใช้ทำการรับรองความถูกต้องใหม่ แอปพลิเคชันลูกค้าสามารถใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นการเข้าถึงใหม่เมื่อโทเค็นการเข้าถึงปัจจุบันหมดอายุ ตราบใดที่โทเค็นการรีเฟรชยังใช้การได้ สถานะการรับรองความถูกต้องของผู้ใช้สามารถรักษาไว้ได้โดยไม่จำเป็นต้องมีการโต้ตอบจากผู้ใช้

การผสมผสานของโทเค็นเหล่านี้ทำให้แอปพลิเคชันลูกค้ารักษาสถานะการรับรองความถูกต้องของผู้ใช้และเข้าถึงทรัพยากรที่ได้รับการป้องกันในนามของผู้ใช้ แอปพลิเคชันลูกค้าจำเป็นต้องเก็บโทเค็นเหล่านี้อย่างปลอดภัยและจัดการวงจรชีวิตของพวกมัน (เช่น สำหรับแอปพลิเคชัน SPA โทเค็นสามารถถูกเก็บในที่เก็บข้อมูลท้องถิ่นของเบราว์เซอร์หรือพื้นที่เก็บข้อมูลเซสชัน สำหรับแอปพลิเคชันเว็บ โทเค็นสามารถถูกเก็บในข้อมูลเซสชันฝั่งเซิร์ฟเวอร์หรือคุกกี้)

กลไกการออกจากระบบ OIDC

กระบวนการออกจากระบบใน OIDC เป็นแนวคิดหลายประการเนื่องจากมีการมีส่วนร่วมของทั้งเซสชันล็อกอินที่จัดการโดย IdP กลางและโทเค็นฝั่งลูกค้าที่กระจาย

เคลียร์โทเค็นและเซสชันท้องถิ่นที่ฝั่งลูกค้า

การออกจากระบบหรือยกเลิกสถานะการรับรองความถูกต้องของผู้ใช้ที่ฝั่งลูกค้าง่าย ๆ แอปพลิเคชันลูกค้าสามารถลบโทเค็นที่เก็บไว้ (ID token, access token และ refresh token) จากเบราว์เซอร์ของผู้ใช้หรือหน่วยความจำ การกระทำนี้ทำให้สถานะการรับรองความถูกต้องของผู้ใช้ไม่ถูกต้องที่ฝั่งลูกค้า

สำหรับแอปพลิเคชันเว็บที่จัดการเซสชันการล็อกอินของผู้ใช้เอง อาจจำเป็นต้องมีขั้นตอนเพิ่มเติม ซึ่งรวมถึงการเคลียร์คุกกี้เซสชันและข้อมูลเซสชันใด ๆ (เช่น โทเค็นที่ออกโดยผู้จัดหาตัวตน หรือ IdP) เพื่อให้มั่นใจว่าผู้ใช้จะออกจากระบบอย่างเต็มที่

เคลียร์เซสชันล็อกอินศูนย์กลางที่ IdP

IdP รักษาเซสชันล็อกอินศูนย์กลางสำหรับผู้ใช้แต่ละคน ตราบใดที่เซสชันนี้ยังใช้งานอยู่ ผู้ใช้อาจได้รับการรับรองความถูกต้องโดยอัตโนมัติแม้ว่าโทเค็นฝั่งลูกค้าถูกล้าง ทำให้สามารถออกโทเค็นใหม่ให้แก่แอปพลิเคชันลูกค้าโดยไม่ต้องมีการโต้ตอบเพิ่มเติมกับ IdP

เพื่อออกจากระบบอย่างเต็มที่จาก IdP, แอปพลิเคชันลูกค้า (RP) สามารถเริ่มขอออกจากระบบไปยัง IdP แอปพลิเคชัน (RP) ควรเปลี่ยนเส้นทางผู้ใช้ไปยัง end-session endpoint ของ IdP เพื่อยุติเซสชันล็อกอินสามารถเคลียร์คุกกี้เซสชันได้ ซึ่งทำให้มั่นใจว่าการออกจากระบบอย่างเต็มที่ผ่านแอปพลิเคชันทั้งหมด (RP) ที่แชร์เซสชันศูนย์รวมเดียวกัน เมื่อเซสชันล็อกอินถูกยกเลิก เมื่อใดก็ตามที่ IdP ได้รับคำขอโทเค็นจาก RP ใด ๆ ที่เชื่อมโยงกับเซสชันเดียวกัน IdP จะแจ้งให้ผู้ใช้ทำการรับรองความถูกต้องใหม่

OIDC back-channel logout

ในบางกรณี เมื่อผู้ใช้ออกจากระบบจากหนึ่งแอปพลิเคชัน (RP) พวกเขาอาจต้องการออกจากระบบจากแอปพลิเคชันทั้งหมด (RP) โดยอัตโนมัติโดยไม่ต้องมีการโต้ตอบเพิ่มเติมจากผู้ใช้ วิธีการนี้สามารถทำได้โดยใช้กลไก back-channel logout

เมื่อ IdP ได้รับคำขอออกจากระบบจาก RP นอกเหนือจากการล้างเซสชันล็อกอินแล้ว IdP ยังส่งการแจ้งเตือนการออกจากระบบผ่านทาง back-channel ไปยัง RP ทั้งหมดที่ใช้เซสชันเดียวกันและมีการลงทะเบียน endpoint การออกจากระบบ back-channel

เมื่อ RP ได้รับการแจ้งเตือนการออกจากระบบผ่าน back-channel พวกเขาสามารถดำเนินการที่จำเป็นเพื่อเคลียร์เซสชันและโทเค็นของผู้ใช้ มั่นใจว่าผู้ใช้จะออกจากระบบอย่างเต็มที่จากแอปพลิเคชันทั้งหมด