การใช้งาน OIDC logout และการจัดการ session: คู่มือที่สมบูรณ์
สำรวจการรับรองความถูกต้องของ OIDC และการจัดการเซสชันอย่างลึกซึ้ง เรียนรู้วิธีการใช้งาน OIDC RP-initiated, IdP-initiated และ back-channel logout สำหรับการจัดการเซสชันที่ปลอดภัย
สำรวจการรับรองความถูกต้องของ OIDC และการจัดการเซสชันอย่างลึกซึ้ง เรียนรู้วิธีการใช้งาน OIDC RP-initiated, IdP-initiated และ back-channel logout สำหรับการจัดการเซสชันที่ปลอดภัย
OpenID Connect (OIDC) เป็นเลเยอร์ตรวจสอบตัวตนที่เรียบง่ายซึ่งสร้างขึ้นบนโปรโตคอล OAuth 2.0 ช่วยให้ลูกค้าตรวจสอบตัวตนของผู้ใช้สุดท้ายจากการรับรองความถูกต้องที่ดำเนินการโดยเซิร์ฟเวอร์การอนุญาต รวมถึงการรับข้อมูลโปรไฟล์พื้นฐานเกี่ยวกับผู้ใช้สุดท้ายในลักษณะที่สามารถทำงานร่วมกันได้และคล้ายกับ REST
OIDC ถูกออกแบบมาให้ง่ายต่อการใช้งานและการดำเนินงาน โดยเน้นความเรียบง่ายและความยืดหยุ่น มันถูกใช้กันอย่างแพร่หลายสำหรับการล็อกอินเพียงครั้งเดียว (SSO) และการตรวจสอบตัวตนในแอปพลิเคชันเว็บ แอปบนมือถือ และ API
การเข้าใจสถานะการรับรองความถูกต้องและการจัดการเซสชันใน OIDC มีความสำคัญ บทความนี้อธิบายว่าเซสชัน OIDC และสถานะการรับรองความถูกต้องของผู้ใช้ถูกจัดการในบริบทของการโต้ตอบระหว่าง ผู้จัดหาตัวตน (IdP) และฝ่ายพึ่งพา (RP) หรือ ผู้ให้บริการ (SP)
บทความนี้มีคำศัพท์ที่สำคัญหลายคำ
เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับการจัดการเซสชันและสถานะการรับรองความถูกต้องของผู้ใช้ใน OIDC ลองทบทวนการทำงานของการรับรองความถูกต้อง OIDC สำหรับแอปพลิเคชันเว็บ:
เซสชันล็อกอินจะถูกตั้งขึ้นเมื่อผู้ใช้ล็อกอินสู่ IdP เซสชันนี้จะใช้สำหรับติดตามสถานะการรับรองความถูกต้องของผู้ใช้ที่ IdP ปกติแล้ว เซสชันจะมีข้อมูลต่าง ๆ เช่น ตัวตนของผู้ใช้ เวลาในการรับรองความถูกต้อง และเวลาหมดอายุของเซสชัน มันถูกสร้างขึ้นเมื่อผู้ใช้ล็อกอินครั้งแรกและจะรักษาไว้จนกว่าผู้ใช้จะล็อกเอาท์หรือเซสชันหมดอายุ
คุกกี้เซสชันจะถูกตั้งอย่างปลอดภัยในเบราว์เซอร์ของผู้ใช้เพื่อรักษาสถานะเซสชัน คุกกี้เซสชันจะถูกใช้สำหรับระบุเซสชันของผู้ใช้และรับรองความถูกต้องของผู้ใช้สำหรับคำขอการรับรองความถูกต้องต่อไป ปกติแล้ว คุกกี้นี้จะถูกตั้งด้วยแฟลก HttpOnly และ Secure เพื่อป้องกันการเข้าถึงจากฝั่งลูกค้าและเพื่อให้มั่นใจการสื่อสารที่ปลอดภัย
สำหรับแต่ละ RP ที่ผู้ใช้เข้าถึงจากอุปกรณ์หรือเบราว์เซอร์ที่ต่างกัน เซสชันล็อกอินของผู้ใช้จะถูกตั้งขายต่างหาก ซึ่งหมายความว่าสถานะการรับรองความถูกต้องของผู้ใช้จะถูกรักษาแยกกันสำหรับแต่ละ RP หากผู้ใช้ล็อกเอาท์จากหนึ่ง RP ผู้ใช้จะยังคงได้รับการรับรองความถูกต้องจาก RP อื่น ๆ จนกว่าเซสชันจะหมดอายุหรือผู้ใช้ล็อกเอาท์จาก RP ทั้งหมด
การจัดการเซสชันศูนย์รวมนี้ยังช่วยให้ IdP รักษาสถานะการรับรองความถูกต้องที่สม่ำเสมอผ่าน RP หลายรายการตราบใดที่เซสชันของผู้ใช้ยังคงใช้งานได้และคำขอการรับรองความถูกต้องมาจากผู้ใช้รายเดียวกัน (อุปกรณ์/เบราว์เซอร์) กลไกนี้เปิดใช้งานคุณสมบัติ SSO ซึ่งผู้ใช้สามารถเข้าถึง RP หลายรายการได้โดยไม่ต้องล็อกอินใหม่
ใน OIDC แอปพลิเคชันลูกค้า (RP) พึ่งพาโทเค็นที่ออกโดย IdP เพื่อยืนยันตัวตนของผู้ใช้และสถานะการรับรองความถูกต้องหรือการอนุญาต "เซสชันล็อกอิน" ที่ฝั่งลูกค้าจะถูกรักษาโดยโทเค็นที่ออกโดย IdP
offline_access และได้รับการอนุญาต แอปพลิเคชันลูกค้าอาจได้รับโทเค็นการรีเฟรช มันให้วิธีในการขยายสถานะการรับรองความถูกต้องของผู้ใช้โดยไม่จำเป็นต้องให้ผู้ใช้ทำการรับรองความถูกต้องใหม่ แอปพลิเคชันลูกค้าสามารถใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นการเข้าถึงใหม่เมื่อโทเค็นการเข้าถึงปัจจุบันหมดอายุ ตราบใดที่โทเค็นการรีเฟรชยังใช้การได้ สถานะการรับรองความถูกต้องของผู้ใช้สามารถรักษาไว้ได้โดยไม่จำเป็นต้องมีการโต้ตอบจากผู้ใช้การผสมผสานของโทเค็นเหล่านี้ทำให้แอปพลิเคชันลูกค้ารักษาสถานะการรับรองความถูกต้องของผู้ใช้และเข้าถึงทรัพยากรที่ได้รับการป้องกันในนามของผู้ใช้ แอปพลิเคชันลูกค้าจำเป็นต้องเก็บโทเค็นเหล่านี้อย่างปลอดภัยและจัดการวงจรชีวิตของพวกมัน (เช่น สำหรับแอปพลิเคชัน SPA โทเค็นสามารถถูกเก็บในที่เก็บข้อมูลท้องถิ่นของเบราว์เซอร์หรือพื้นที่เก็บข้อมูลเซสชัน สำหรับแอปพลิเคชันเว็บ โทเค็นสามารถถูกเก็บในข้อมูลเซสชันฝั่งเซิร์ฟเวอร์หรือคุกกี้)
กระบวนการออกจากระบบใน OIDC เป็นแนวคิดหลายประการเนื่องจากมีการมีส่วนร่วมของทั้งเซสชันล็อกอินที่จัดการโดย IdP กลางและโทเค็นฝั่งลูกค้าที่กระจาย
การออกจากระบบหรือยกเลิกสถานะการรับรองความถูกต้องของผู้ใช้ที่ฝั่งลูกค้าง่าย ๆ แอปพลิเคชันลูกค้าสามารถลบโทเค็นที่เก็บไว้ (ID token, access token และ refresh token) จากเบราว์เซอร์ของผู้ใช้หรือหน่วยความจำ การกระทำนี้ทำให้สถานะการรับรองความถูกต้องของผู้ใช้ไม่ถูกต้องที่ฝั่งลูกค้า
สำหรับแอปพลิเคชันเว็บที่จัดการเซสชันการล็อกอินของผู้ใช้เอง อาจจำเป็นต้องมีขั้นตอนเพิ่มเติม ซึ่งรวมถึงการเคลียร์คุกกี้เซสชันและข้อมูลเซสชันใด ๆ (เช่น โทเค็นที่ออกโดยผู้จัดหาตัวตน หรือ IdP) เพื่อให้มั่นใจว่าผู้ใช้จะออกจากระบบอย่างเต็มที่
IdP รักษาเซสชันล็อกอินศูนย์กลางสำหรับผู้ใช้แต่ละคน ตราบใดที่เซสชันนี้ยังใช้งานอยู่ ผู้ใช้อาจได้รับการรับรองความถูกต้องโดยอัตโนมัติแม้ว่าโทเค็นฝั่งลูกค้าถูกล้าง ทำให้สามารถออกโทเค็นใหม่ให้แก่แอปพลิเคชันลูกค้าโดยไม่ต้องมีการโต้ตอบเพิ่มเติมกับ IdP
เพื่อออกจากระบบอย่างเต็มที่จาก IdP, แอปพลิเคชันลูกค้า (RP) สามารถเริ่มขอออกจากระบบไปยัง IdP แอปพลิเคชัน (RP) ควรเปลี่ยนเส้นทางผู้ใช้ไปยัง end-session endpoint ของ IdP เพื่อยุติเซสชันล็อกอินสามารถเคลียร์คุกกี้เซสชันได้ ซึ่งทำให้มั่นใจว่าการออกจากระบบอย่างเต็มที่ผ่านแอปพลิเคชันทั้งหมด (RP) ที่แชร์เซสชันศูนย์รวมเดียวกัน เมื่อเซสชันล็อกอินถูกยกเลิก เมื่อใดก็ตามที่ IdP ได้รับคำขอโทเค็นจาก RP ใด ๆ ที่เชื่อมโยงกับเซสชันเดียวกัน IdP จะแจ้งให้ผู้ใช้ทำการรับรองความถูกต้องใหม่
ในบางกรณี เมื่อผู้ใช้ออกจากระบบจากหนึ่งแอปพลิเคชัน (RP) พวกเขาอาจต้องการออกจากระบบจากแอปพลิเคชันทั้งหมด (RP) โดยอัตโนมัติโดยไม่ต้องมีการโต้ตอบเพิ่มเติมจากผู้ใช้ วิธีการนี้สามารถทำได้โดยใช้กลไก back-channel logout
เมื่อ IdP ได้รับคำขอออกจากระบบจาก RP นอกเหนือจากการล้างเซสชันล็อกอินแล้ว IdP ยังส่งการแจ้งเตือนการออกจากระบบผ่านทาง back-channel ไปยัง RP ทั้งหมดที่ใช้เซสชันเดียวกันและมีการลงทะเบียน endpoint การออกจากระบบ back-channel
เมื่อ RP ได้รับการแจ้งเตือนการออกจากระบบผ่าน back-channel พวกเขาสามารถดำเนินการที่จำเป็นเพื่อเคลียร์เซสชันและโทเค็นของผู้ใช้ มั่นใจว่าผู้ใช้จะออกจากระบบอย่างเต็มที่จากแอปพลิเคชันทั้งหมด