PlusMagi's Blog By Pitt Phunsanit Backend,Cybersecurity,Database Backend: API Security ทะลุปรุโปร่งเรื่อง OAuth2, JWT, OpenID Connect และ CORS

Backend: API Security ทะลุปรุโปร่งเรื่อง OAuth2, JWT, OpenID Connect และ CORS

ในโลกของการพัฒนา Backend สมัยใหม่ การที่ระบบต่างๆ ต้องเชื่อมต่อและแลกเปลี่ยนข้อมูลผ่าน Application Programming Interfaces (APIs) ได้กลายเป็นหัวใจสำคัญของการทำงาน การรักษาความปลอดภัยของ API จึงไม่ใช่แค่ทางเลือก แต่เป็นข้อบังคับที่ขาดไม่ได้ การเปิดช่องโหว่ในส่วนนี้อาจนำไปสู่การรั่วไหลของข้อมูลที่ร้ายแรงได้

ในฐานะ Senior Architect เราต้องมั่นใจว่ากลไกการพิสูจน์ตัวตน (Authentication) และการกำหนดสิทธิ์ (Authorization) นั้นแข็งแกร่งที่สุด บทความนี้จะเจาะลึกถึงมาตรฐานสำคัญอย่าง OAuth 2.0, JWT, OpenID Connect, และ CORS โดยเน้นการประยุกต์ใช้ความสามารถของ PostgreSQL ในการเสริมความปลอดภัยเหล่านี้

🛡️ OAuth 2.0 และ OpenID Connect (OIDC) บน PostgreSQL

OAuth 2.0 คือมาตรฐานสำหรับการมอบสิทธิ์การเข้าถึงแบบมอบหมาย (Delegated Authorization) โดยที่ผู้ใช้ไม่จำเป็นต้องส่งรหัสผ่านให้แอปพลิเคชันภายนอกโดยตรง ส่วน OpenID Connect (OIDC) คือชั้นความปลอดภัยที่เพิ่มข้อมูลตัวตน (Identity Layer) เข้ามา ทำให้เราทราบว่าผู้ใช้งานคือใครอย่างชัดเจน

เมื่อใช้ PostgreSQL ในการจัดการสิทธิ์ เราสามารถใช้ประเภทข้อมูล jsonb เพื่อจัดเก็บข้อมูล Scope หรือ Client Metadata ที่ซับซ้อนได้อย่างมีประสิทธิภาพ ตัวอย่างการบันทึก Client ID และ Scope:

SQL

INSERT INTO oauth_clients (client_id, client_secret, allowed_scopes) VALUES ('web_app_client', 'secret123', '{"read": true, "write": false}');

🔑 JWT (JSON Web Token) และการจัดการ Claims

JWT คือรูปแบบมาตรฐานที่ใช้เข้ารหัส Access Token ซึ่งประกอบด้วย Header, Payload และ Signature การใช้ JWT ทำให้เราสามารถตรวจสอบความถูกต้องของโทเคนได้โดยไม่ต้องเรียกฐานข้อมูลทุกครั้ง (Stateless) เมื่อมีการส่งโทเคนมาถึง Backend ที่ใช้ PostgreSQL เราสามารถใช้ฟังก์ชัน JSONB เพื่อดึงและตรวจสอบ Claims ต่างๆ เช่น User ID, Expiration Time, และ Roles ได้อย่างรวดเร็ว

สมมติว่าเราได้รับ JWT ที่มี User ID และ Role เป็นข้อมูล Claims:

SQL

SELECT claims->>'user_id', claims->>'role' FROM user_tokens WHERE token_hash = 'a1b2c3d4e5f6' AND claims->>'exp' > NOW() - INTERVAL '1 hour';

🌐 CORS (Cross-Origin Resource Sharing)

CORS เป็นกลไกความปลอดภัยระดับเบราว์เซอร์ที่กำหนดว่า Origin ใดบ้างที่ได้รับอนุญาตให้เรียกใช้ API ของเรา แม้ว่า PostgreSQL จะเป็นฐานข้อมูล แต่การตั้งค่าที่เกี่ยวข้องกับ CORS มักจะถูกจัดการในระดับ Application Server (เช่น API Gateway หรือ Web Framework) ซึ่งต้องมีการกำหนดค่าที่สอดคล้องกับ Policy ที่จัดเก็บไว้ในระบบหลังบ้าน

💡 บทสรุป: การสร้างระบบ API ที่ปลอดภัยด้วย PostgreSQL

การรวมกันของมาตรฐานสากลอย่าง OAuth 2.0, OIDC, และ JWT เข้ากับการจัดการข้อมูลที่มีประสิทธิภาพของ PostgreSQL (โดยเฉพาะการใช้ jsonb) ทำให้เราสามารถสร้าง Backend API ที่มีความปลอดภัยสูงและปรับขนาดได้ (Scalable) การตรวจสอบสิทธิ์ทุกครั้งต้องอาศัยการตรวจสอบทั้งโทเคน (JWT) และการกำหนดสิทธิ์ (Scope) ที่ถูกจัดเก็บไว้อย่างเป็นระเบียบในฐานข้อมูล เพื่อให้แน่ใจว่าทุกการเรียกใช้ข้อมูลเป็นไปตามหลักการ Least Privilege เสมอ