• OIDC
  • SSO
  • การรับรองตัวตน

การจัดการเซสชัน OIDC

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

Simeng
Simeng
Developer

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

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

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

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

บทความนี้ประกอบไปด้วยหลายคำสำคัญ:

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

การทำงานของการรับรองตัวตน OIDC ทำงานอย่างไร

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

  1. ผู้ใช้เข้าถึงแอปพลิเคชันเว็บ (RP)
  2. RP เปลี่ยนเส้นทางผู้ใช้ไปยังผู้ให้บริการ OIDC (IdP) สำหรับ การรับรองตัวตน
  3. ผู้ให้บริการ OIDC ตรวจสอบสถานะเซสชันการลงชื่อเข้าใช้ของผู้ใช้ หากไม่มีเซสชันหรือเซสชันได้หมดอายุ ผู้ใช้จะถูกขอให้ลงชื่อเข้าใช้
  4. ผู้ใช้โต้ตอบกับหน้าเข้าสู่ระบบเพื่อการรับรองตัวตน
  5. หน้าการลงชื่อเข้าใช้ส่งผลลัพธ์การโต้ตอบไปยังผู้ให้บริการ OIDC
  6. ผู้ให้บริการ OIDC สร้างเซสชันการลงชื่อเข้าใช้และ grant ใหม่สำหรับผู้ใช้
  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: โทเค็นอายุสั้นที่มีข้อมูลของผู้ใช้และถูกใช้เพื่อตรวจสอบเอกลักษณ์ของผู้ใช้ที่ได้รับการรับรอง
  • โทเค็นการเข้าถึง: โทเค็นที่ให้สิทธิ์การเข้าถึงทรัพยากรที่ป้องกันในนามของผู้ใช้ อายุการใช้งานของโทเค็นสามารถเป็นอายุสั้นหรืออายุนาน ขึ้นอยู่กับการตั้งค่า แอปพลิเคชันลูกค้าอาจอาศัยความถูกต้องของโทเค็นเพื่อระบุสถานะการรับรองตัวตนของผู้ใช้ หากโทเค็นหมดอายุหรือถูกลบออก ผู้ใช้อาจถูกพิจารณาว่า "ออกจากระบบ" หรือ "ไม่ได้รับการยืนยันตัวตน" และต้องทำการรับรองตัวตนใหม่
  • โทเค็นรีเฟรช: หากคำขอ offline_access ถูกร้องขอและได้รับการอนุญาต แอปพลิเคชันลูกค้าอาจได้รับโทเค็นรีเฟรช มันมอบวิธีการยืดอายุสถานะการรับรองตัวตนของผู้ใช้โดยไม่จำเป็นต้องให้ผู้ใช้รับรองตัวตนอีกครั้ง แอปพลิเคชันลูกค้าสามารถใช้โทเค็นรีเฟรชเพื่อรับโทเค็นการเข้าถึงใหม่เมื่อโทเค็นปัจจุบันหมดอายุ ตราบเท่าที่โทเค็นรีเฟรชยังคงใช้งานได้ สถานะการรับรองตัวตนของผู้ใช้สามารถถูกเก็บรักษาไว้โดยไม่ต้องมีการโต้ตอบกับผู้ใช้

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

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

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

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

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

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

ล้างเซสชันการเข้าสู่ระบบรวมศูนย์ที่ IdP

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

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

การออกจากระบบผ่านช่องทางเบื้องหลังของ OIDC

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

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

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