เจาะลึกระบบ One Tap บน PingFederate 12.3.3: สถาปัตยกรรมและการจัดการสถานะ
เรียนรู้วิธีสร้างระบบจดจำบัญชีผู้ใช้แบบ One Tap บน PingFederate 12.3.3 โดยแยกสถานะระหว่างเบราว์เซอร์และแอปพลิเคชัน พร้อมความปลอดภัยขั้นสูง

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- ระบบ One Tap บน PingFederate 12.3.3 ต้องแยกสถานะระหว่างเว็บแอปพลิเคชันและระบบยืนยันตัวตนให้ชัดเจน
- ใช้ Secure Account Bridge อ่านคุกกี้ HttpOnly ผ่าน iframe ที่จำกัด Origin ด้วย postMessage และ nonce
- รองรับการยืนยันตัวตนแบบ OIDC Authorization Code ร่วมกับ PKCE และพารามิเตอร์ prompt=none
- เตรียมพบกับการใช้งานจริงผ่าน Docker และ Terraform ในบทความตอนต่อไป
การสร้างประสบการณ์เข้าสู่ระบบที่จดจำบัญชีผู้ใช้และให้ผู้ใช้กลับมาคลิกเดียวเข้าสู่ระบบได้ทันทีสำหรับ PingFederate นั้น มีความซับซ้อนมากกว่าการสร้างปุ่มเลือกบัญชีทั่วไป เนื่องจากเบราว์เซอร์ PingFederate และเว็บแอปพลิเคชันต่างมีสถานะของตัวเอง หากนำสถานะเหล่านี้มารวมกันจะทำให้เกิดปัญหาขอรหัสผ่านซ้ำซ้อน หน้าจอค้าง หรือการออกจากระบบที่ไม่สมบูรณ์
บทความซีรีส์นี้จะอธิบายการใช้งานจริงในสภาพแวดล้อมท้องถิ่นสำหรับ PingFederate เวอร์ชัน 12.3.3 โดยซอร์สโค้ดทั้งหมดเปิดให้ใช้งานผ่าน GitHub (github.com/darkedges/pingfedonetap)

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
หัวใจสำคัญคือการแยกแยะสถานะออกเป็น 3 ส่วน ได้แก่ เว็บแอปพลิเคชันที่ดูแลสถานะการเข้าสู่ระบบและผลลัพธ์ OIDC callback เซสชันการยืนยันตัวตนของ PingFederate ที่ตรวจสอบความถูกต้องของผู้ใช้ และคุกกี้ Identifier First adapter ที่จดจำบัญชีผู้ใช้งานที่เคยยืนยันตัวตนสำเร็จแล้ว สถานะเหล่านี้ต้องถูกประสานการทำงานร่วมกัน ไม่ใช่การยุบรวมเป็นชุดข้อมูลเดียว
การแยกสถานะออกจากกันอย่างเด็ดขาดถือเป็นหัวใจสำคัญของสถาปัตยกรรม OAuth และ OIDC สมัยใหม่ การที่เว็บแอปพลิเคชันและเซิร์ฟเวอร์ยืนยันตัวตนถือข้อมูลคนละชุดช่วยลดความเสี่ยงด้านช่องโหว่การจัดการเซสชันข้ามโดเมน และทำให้นักพัฒนาสามารถควบคุมวงจรชีวิตของโทเค็น (Token Lifecycle) ได้อย่างแม่นยำยิ่งขึ้น
เดโมแอปพลิเคชันรันอยู่ที่ http://localhost:8080 ในขณะที่ PingFederate ทำงานอยู่ที่ https://localhost:9031 บน Origin ที่แตกต่างกัน ทำให้แอปพลิเคชันไม่สามารถตรวจสอบคุกกี้ของ PingFederate ได้โดยตรง ทางออกจึงเป็นการพัฒนา status-only PingFederate adapter ขนาดเล็กที่อ่านคุกกี้ Identifier First และส่งข้อมูลผ่าน iframe bridge ที่จำกัดสิทธิ์
"A remembered account is not automatically a passwordless account.": The account chooser answers "who might sign in?" A valid PingFederate authentication session answers "has this user already proved who they are?"
DarkEdges
ระบบความปลอดภัยของ Secure Account Bridge ประกอบด้วยการควบคุมหลายส่วนทำงานร่วมกัน:
- ตรวจสอบ Origin ที่กำหนดให้อยู่ในรูปแบบ scheme, host และ port ที่ถูกต้อง ปฏิเสธพารามิเตอร์อื่น
- ใช้ nonce แบบสุ่มความยาว 32 ถึง 128 ตัวอักษรฐานสิบหก เพื่อตรวจสอบความถูกต้องของข้อความ
- กำหนด iframe เป็น sandbox="allow-scripts" และจำกัดนโยบาย Content-Security-Policy ด้วย frame-ancestors
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น