วิธีเชื่อมต่อระบบ 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
- เข้าไปที่ Google Cloud Console
- สร้าง Project ใหม่
- เปิดใช้งาน OAuth 2.0 Client ID
- ตั้งค่า Redirect URI เป็น:
http://localhost:8000/api/auth/google/callback
- คัดลอก 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
Related Posts
- สร้างแอปจองแท็กซี่ของคุณเองกับ Simplico: ปลอดภัย ขยายได้ และพร้อมเปิดตัวทันที
- วางระบบ Backend สำหรับสถานีชาร์จ EV ที่พร้อมขยายตัว — ออกแบบโดย Simplico
- วิธีจัดการราคาซับซ้อนสำหรับสินค้าสั่งทำพิเศษ (Made-to-Order) ใน Odoo
- วิธีสร้างระบบสั่งผลิตสินค้าเฉพาะลูกค้า (Made-to-Order) เพื่อเพิ่มยอดขายและความพึงพอใจ
- ปรับธุรกิจให้ฉลาดขึ้นด้วย Agentic AI อัตโนมัติเต็มรูปแบบ
- จัดการเครื่องทดสอบใยแก้วนำแสง EXFO อย่างง่าย ด้วยระบบ Admin Panel น้ำหนักเบา
- ยกระดับความพร้อมปฏิบัติการทางเรือ ด้วยการจำลอง EMI: ลดความเสี่ยงอย่างคุ้มค่า ด้วย MEEP และ Python
- เสริมความมั่นคงปลอดภัยทางไซเบอร์ด้วย Wazuh: ระบบ SIEM แบบโอเพ่นซอร์สที่ปรับขนาดได้และคุ้มค่า
- ข้อเสนอโซลูชัน OCPP Central System + Mobile App
- ระบบ TAK กับการเปลี่ยนแปลงภารกิจรักษาความมั่นคงชายแดน
- เปรียบเทียบ ChatGPT‑4o vs GPT‑4.1 vs GPT‑4.5 – เลือกรุ่นไหนดีที่สุด?
- ลูกค้าสามารถถอดรหัสข้อมูลจากเซิร์ฟเวอร์ได้หรือไม่หากไม่มี Private Key? (สรุป: ไม่ได้ — และนี่คือเหตุผล)
- การจัดการ JWT Authentication ระหว่างหลายเฟรมเวิร์ก
- สร้างระบบแอดมินสำหรับ EXFO Tester ด้วย FastAPI และ Alpine.js แบบเบาและมีประสิทธิภาพ
- การตรวจสอบอุปกรณ์เครือข่าย Cisco ด้วย Wazuh: คู่มือฉบับสมบูรณ์
- สร้างระบบเชื่อมต่อแอปมือถือกับระบบชาร์จไฟฟ้า OCPP ด้วย FastAPI
- การจำลองการรบกวนทางแม่เหล็กไฟฟ้า (EMC/EMI) บนดาดฟ้าเรือรบด้วย MEEP และ Python
- ระบบ TAK ทำงานอย่างไร: คู่มือฉบับสมบูรณ์สำหรับการรับรู้สถานการณ์แบบเรียลไทม์
- สร้างเว็บไซต์และแอปขายของออนไลน์ พร้อมระบบ AI แชทบอทอัจฉริยะ – ครบจบในที่เดียว
- ระบบแนะนำสินค้าอัจฉริยะมาแล้ว — พร้อมใช้งานในร้านของคุณ