วิธีเชื่อมต่อระบบ Single Sign-On (SSO) ด้วย Google OAuth ใน FastAPI

ในยุคที่ผู้ใช้งานไม่อยากจดจำรหัสผ่านอีกต่อไป — Single Sign-On (SSO) คือคำตอบ

บทความนี้จะแนะนำวิธีสร้างระบบล็อกอินผ่านบัญชี Google บนแอปพลิเคชัน FastAPI โดยใช้ MongoDB, JWT, และไลบรารี fastapi-sso เพื่อให้คุณเริ่มต้นได้อย่างมั่นใจและปลอดภัย


🔎 ทำไมต้องมีระบบ SSO?

SSO ไม่ใช่แค่ความสะดวกสบาย แต่เป็นความปลอดภัยด้วย

🔐 1. ปลอดภัยยิ่งขึ้น

  • ลดความเสี่ยงจากการรั่วไหลของรหัสผ่าน
  • ใช้ระบบความปลอดภัยจาก Google, Facebook, Microsoft
  • รองรับ Multi-Factor Authentication (MFA)

🤝 2. ผู้ใช้ไม่ต้องจำรหัสผ่าน

  • ล็อกอินด้วยบัญชีที่มีอยู่แล้ว
  • ไม่ต้องกรอกฟอร์มลงทะเบียนใหม่
  • ลดอัตราการละทิ้งการสมัครใช้งาน

🛠️ 3. นักพัฒนาไม่ต้องจัดการกับระบบรหัสผ่านเอง

  • ไม่ต้องดูแลระบบ Reset Password
  • ลดข้อมูลผู้ใช้ที่ต้องจัดเก็บ (เช่น รหัสผ่าน)

🧩 4. ใช้งานร่วมกับหลายระบบได้

  • ล็อกอินครั้งเดียวใช้งานได้หลายระบบในองค์กร

💼 5. ตอบโจทย์ระดับองค์กร

  • เชื่อมต่อกับ Google Workspace หรือ Azure AD ได้ง่าย
  • รองรับระบบภายในขององค์กร

✅ เทคโนโลยีที่ใช้

เครื่องมือ หน้าที่
FastAPI Web Framework ภาษา Python (Asynchronous)
fastapi-sso เชื่อมต่อ OAuth2 (Google SSO)
MongoDB + Motor ฐานข้อมูลสำหรับจัดเก็บผู้ใช้
python-jose สร้างและตรวจสอบ JWT Token
passlib เข้ารหัสรหัสผ่านแบบปลอดภัย (ถ้ามีการสมัครด้วยรหัสผ่าน)

⚙️ ขั้นตอนการเชื่อมต่อ Google SSO กับ FastAPI

1. ติดตั้งไลบรารี

pip install fastapi uvicorn motor fastapi-sso python-dotenv python-jose passlib[bcrypt]

2. สมัคร Google OAuth

  1. เข้าไปที่ Google Cloud Console
  2. สร้าง Project ใหม่
  3. เปิดใช้งาน OAuth 2.0 Client ID
  4. ตั้งค่า Redirect URI เป็น:
http://localhost:8000/api/auth/google/callback
  1. คัดลอก Client ID และ Client Secret

3. ตั้งค่า .env

MONGODB_URI=mongodb://localhost:27017
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URL=http://localhost:8000/api/auth/google/callback
JWT_SECRET=your_jwt_secret

4. เขียนโค้ด FastAPI

ตัวอย่างโค้ดหลักมีดังนี้ (ดูเวอร์ชันเต็มใน GitHub ของเรา):

  • /api/auth/google/login → ไปยังหน้าล็อกอินของ Google
  • /api/auth/google/callback → รับข้อมูลผู้ใช้กลับจาก Google และสร้าง JWT
  • /api/register → รองรับการสมัครด้วยชื่อผู้ใช้/รหัสผ่าน (ทางเลือก)
  • /api/token → ล็อกอินแบบคลาสสิกด้วยรหัสผ่าน
  • ทุกเส้นทางสามารถป้องกันด้วย JWT Token ได้

🔄 แผนภาพลำดับการทำงานของ SSO

sequenceDiagram
    actor ผู้ใช้
    participant เบราว์เซอร์
    participant FastAPI
    participant GoogleOAuth
    participant MongoDB

    ผู้ใช้->>เบราว์เซอร์: คลิก "ล็อกอินด้วย Google"
    เบราว์เซอร์->>FastAPI: GET /auth/google/login
    FastAPI->>GoogleOAuth: เปลี่ยนเส้นทางไปยัง Google OAuth
    ผู้ใช้->>GoogleOAuth: ล็อกอินและให้สิทธิ์
    GoogleOAuth->>FastAPI: เปลี่ยนเส้นทางกลับ /auth/google/callback?code=XYZ
    FastAPI->>GoogleOAuth: ตรวจสอบและดึงข้อมูลผู้ใช้
    GoogleOAuth-->>FastAPI: ส่งข้อมูล email, ชื่อ, avatar

    alt ผู้ใช้ใหม่
        FastAPI->>MongoDB: บันทึกข้อมูลผู้ใช้ใหม่
    else ผู้ใช้เดิม
        FastAPI->>MongoDB: ดึงข้อมูลผู้ใช้จากฐานข้อมูล
    end

    FastAPI->>FastAPI: สร้าง JWT Token
    FastAPI-->>เบราว์เซอร์: ส่ง access_token กลับ
    เบราว์เซอร์->>ผู้ใช้: เข้าสู่ระบบสำเร็จ

🧾 รูปแบบข้อมูลผู้ใช้ใน MongoDB

{
  "username": "jane.doe@gmail.com",
  "email": "jane.doe@gmail.com",
  "full_name": "Jane Doe",
  "avatar_url": "https://lh3.googleusercontent.com/...",
  "sso_provider": "google",
  "created_at": "2025-07-02T08:00:00Z"
}

🔐 การปกป้องเส้นทางด้วย JWT

Authorization: Bearer <token>

เส้นทางที่ปกป้อง:

@router.get("/me")
async def me(current_user=Depends(get_current_user)):
    return current_user

🚀 สิ่งที่สามารถพัฒนาต่อได้

  • เพิ่มผู้ให้บริการอื่น เช่น Facebook, Microsoft
  • เปลี่ยนเส้นทางกลับไปยัง frontend หลังล็อกอิน
  • เชื่อมต่อกับ Mobile App ผ่าน Deep Link
  • จัดการ Role และ Permission ของผู้ใช้

📌 สรุป

ในบทความนี้คุณได้เรียนรู้วิธี:

  • เชื่อมต่อ Google OAuth2 กับ FastAPI
  • สร้างระบบ SSO ที่ปลอดภัยด้วย JWT
  • จัดเก็บข้อมูลผู้ใช้ลง MongoDB
  • ใช้งาน Token เพื่อควบคุมสิทธิ์ API

นี่คือจุดเริ่มต้นที่ดีในการสร้างระบบล็อกอินที่ปลอดภัย และพร้อมขยายสู่ระดับองค์กร


🏢 ติดต่อเรา

Simplico Co., Ltd. เชี่ยวชาญด้านการพัฒนา Web Backend ด้วย Python, FastAPI, MongoDB และ Cloud Infrastructure

ให้เราช่วยคุณสร้างระบบ SSO หรือ API ที่ปลอดภัยและมีประสิทธิภาพ
📨 ติดต่อเรา: https://simplico.net


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products