PlusMagi's Blog By Pitt Phunsanit Backend,Cybersecurity,Database Astro: Middleware (การดักจับ Request, จัดการ Auth, Cookies, และ Headers)

Astro: Middleware (การดักจับ Request, จัดการ Auth, Cookies, และ Headers)

ในโลกของการพัฒนาแอปพลิเคชันสมัยใหม่ การจัดการ Request, การตรวจสอบสิทธิ์ (Authentication), และการจัดการสถานะ (Session State) เป็นหัวใจสำคัญที่เรียกว่า ‘Middleware’ แม้ว่า Middleware จะเป็นแนวคิดที่มักพบในระดับ Framework (เช่น Astro หรือ Express) แต่สำหรับระบบที่ใช้ฐานข้อมูล PostgreSQL เป็นแกนหลัก เราสามารถจำลองและจัดการฟังก์ชันการทำงานที่ซับซ้อนเหล่านี้ได้อย่างทรงพลังผ่านการใช้ Stored Procedures, Functions, และ Triggers ของ PostgreSQL

💡 Middleware Concept ในมุมมองของ PostgreSQL

ในบริบทของ PostgreSQL เราไม่ได้เขียน Middleware ในรูปแบบของ HTTP Hook โดยตรง แต่เราจะใช้คุณสมบัติของภาษา PL/pgSQL เพื่อสร้างชั้นตรรกะ (Business Logic Layer) ที่ทำหน้าที่ ‘ดักจับ’ และ ‘ตรวจสอบ’ ข้อมูลที่เข้ามาในระบบก่อนที่จะอนุญาตให้เกิดการดำเนินการใดๆ ในตารางข้อมูลหลัก การทำเช่นนี้ช่วยให้เรามั่นใจได้ว่าทุก Request ที่เข้ามาจะต้องผ่านการตรวจสอบความถูกต้องของ Token, Cookie, และสิทธิ์การเข้าถึงก่อนเสมอ

🔒 การจำลองการตรวจสอบสิทธิ์ (Auth & Session Management)

แทนที่จะพึ่งพา Cookie ภายนอก เราสามารถเก็บข้อมูล Session และ Token ไว้ในตารางเฉพาะ และใช้ฟังก์ชันในการตรวจสอบความถูกต้องของ Token นั้นๆ ได้อย่างแม่นยำ โดยใช้ประเภทข้อมูล JSONB เพื่อรองรับ Metadata ที่ยืดหยุ่น เช่น Headers หรือ User Roles

SQL

-- 1. สร้างตารางสำหรับเก็บ Session และ Token (จำลองการจัดเก็บ Cookie/Header State) </code>
CREATE TABLE user_sessions (
    session_id VARCHAR(64) PRIMARY KEY,
    user_id INT NOT NULL,
    auth_token TEXT NOT NULL,
    metadata JSONB,
    expiry_date TIMESTAMP WITH TIME ZONE
);

-- 2. สร้างฟังก์ชัน Middleware เพื่อตรวจสอบ Token (Request Interception)
CREATE OR REPLACE FUNCTION check_middleware_auth(p_token TEXT) RETURNS BOOLEAN AS $$
BEGIN
    -- ตรวจสอบว่า Token มีอยู่ในระบบและยังไม่หมดอายุ
    PERFORM 1 FROM user_sessions WHERE auth_token = p_token AND expiry_date > NOW();
    
    IF FOUND THEN
        RETURN TRUE;
    ELSE
        -- หากไม่พบ Token หรือหมดอายุ ให้ยกเลิกการดำเนินการ (Simulate 401 Unauthorized)
        RAISE EXCEPTION 'Authentication Failed: Invalid or expired token.';
    END IF;
END;$$ LANGUAGE plpgsql;

-- 3. ตัวอย่างการเรียกใช้ฟังก์ชัน (จำลองการดักจับ Request)
SELECT check_middleware_auth('token123');

⚙️ การใช้ Trigger สำหรับการบังคับใช้ Middleware

เพื่อบังคับให้ทุกการดำเนินการ (INSERT, UPDATE, DELETE) ต้องผ่านการตรวจสอบสิทธิ์ เราสามารถผูกฟังก์ชัน Middleware เข้ากับ Trigger ได้ ตัวอย่างเช่น หากเราต้องการให้แน่ใจว่าไม่มีการลบข้อมูลผู้ใช้หากไม่มี Token ที่ถูกต้องเข้ามา:

SQL

-- สมมติว่ามีตาราง 'user_data' และต้องการป้องกันการลบหากไม่มีสิทธิ์
CREATE TRIGGER enforce_delete_auth
BEFORE DELETE ON user_data
FOR EACH ROW
EXECUTE FUNCTION check_middleware_auth('admin_token');

✨ บทสรุป: ความแข็งแกร่งของ PostgreSQL Middleware

การใช้ PostgreSQL Functions และ Triggers ช่วยให้เราสามารถสร้างชั้น Middleware ที่แข็งแกร่งและเชื่อถือได้ในระดับฐานข้อมูล ซึ่งเป็นจุดที่ยากต่อการถูกข้ามผ่าน (Bypass) ต่างจากการจัดการ Middleware ที่อยู่ในระดับ Application Layer เพียงอย่างเดียว การจัดการ Auth, Cookies, และ Headers ผ่านการตรวจสอบ Token ภายในฟังก์ชัน ทำให้ระบบมีความปลอดภัยสูงและเป็นไปตามหลักการของ Senior Architect ที่เน้นความสมบูรณ์ของข้อมูลตั้งแต่ต้นทางถึงปลายทาง

Exit mobile version