การจัดการเซสชัน OIDC
บทความนี้อธิบายวิธีการจัดการเซสชัน OIDC และสถานะการรับรองตัวตนของผู้ใช้ในบริบทของการโต้ตอบระหว่าง IdP และ SP
การจัดการเซสชัน 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 สำหรับแอปพลิเคชันเว็บอย่างสั้นๆ :
- ผู้ใช้เข้าถึงแอปพลิเคชันเว็บ (RP)
- RP เปลี่ยนเส้นทางผู้ใช้ไปยังผู้ให้บริการ OIDC (IdP) สำหรับ การรับรองตัวตน
- ผู้ให้บริการ OIDC ตรวจสอบสถานะเซสชันการลงชื่อเข้าใช้ของผู้ใช้ หากไม่มีเซสชันหรือเซสชันได้หมดอายุ ผู้ใช้จะถูกขอให้ลงชื่อเข้าใช้
- ผู้ใช้โต้ตอบกับหน้าเข้าสู่ระบบเพื่อการรับรองตัวตน
- หน้าการลงชื่อเข้าใช้ส่งผลลัพธ์การโต้ตอบไปยังผู้ให้บริการ OIDC
- ผู้ให้บริการ OIDC สร้างเซสชันการลงชื่อเข้าใช้และ grant ใหม่สำหรับผู้ใช้
- ผู้ให้บริการ OIDC เปลี่ยนเส้นทางผู้ใช้กลับไปยัง RP พร้อมกับรหัสการรับรองตัวตน (Authorization Code flow)
- 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 ได้รับการแจ้งเตือนการออกจากระบบผ่านช่องทางเบื้องหลัง พวกเขาสามารถทำการกระทำที่จำเป็นเพื่อล้างเซสชันและโทเค็นของผู้ใช้ เพื่อให้มั่นใจว่าผู้ใช้ได้ออกจากระบบอย่างสมบูรณ์จากทุกแอปพลิเคชัน