การยืนยันตัวตนด้วย JWT ใน FastAPI

การยืนยันตัวตน (Authentication) คือการถามว่า "คุณคือใคร?" การกำหนดสิทธิ์ (Authorization) คือการถามว่า "คุณทำอะไรได้บ้าง?"

หากคุณสร้างแพลตฟอร์ม AI โดยไม่มีระบบความปลอดภัย ใครก็ตามก็สามารถเข้าถึงข้อมูลส่วนตัวได้ พวกเขาสามารถเปลี่ยนโปรไฟล์ผู้ใช้หรือดูความคืบหน้าของนักเรียนได้ คุณจึงต้องปกป้องทรัพยากรของคุณ

JWT (JSON Web Token) คือทางออกของเรื่องนี้ แทนที่จะส่งรหัสผ่านไปกับทุกคำขอ (request) ผู้ใช้จะส่งโทเคน (token) ที่มีความปลอดภัยแทน

ขั้นตอนการทำงาน:

คุณควรใช้เครื่องมือเหล่านี้:

อย่าเก็บรหัสผ่านเป็นข้อความธรรมดา (plain text) โดยเด็ดขาด หากแฮกเกอร์ขโมยฐานข้อมูลของคุณไปได้ พวกเขาจะได้ข้อมูลทุกอย่างไป แต่ให้เก็บเป็นค่าแฮช (hash) แทน

การแฮชจะเปลี่ยน "password123" ให้กลายเป็นชุดตัวอักษรสุ่มที่ยาวมาก คุณไม่สามารถเปลี่ยนค่าแฮชกลับมาเป็นรหัสผ่านได้ คุณทำได้เพียงตรวจสอบว่าข้อมูลที่ป้อนเข้ามานั้นตรงกับค่าแฮชหรือไม่เท่านั้น

วิธีการสร้าง:

  1. การลงทะเบียน ผู้ใช้ส่งชื่อผู้ใช้และรหัสผ่าน คุณทำการแฮชรหัสผ่านแล้วจัดเก็บลงในฐานข้อมูลของคุณ

  2. การเข้าสู่ระบบ ผู้ใช้ส่งข้อมูลประจำตัว คุณค้นหาค่าแฮชที่จัดเก็บไว้ จากนั้นใช้ไลบรารีเพื่อตรวจสอบรหัสผ่าน หากข้อมูลตรงกัน คุณจึงจะสร้างโทเคนขึ้นมา

  3. การสร้าง JWT โทเคนจะประกอบด้วยข้อมูลผู้ใช้และเวลาหมดอายุ คุณต้องลงลายเซ็น (sign) ในโทเคนด้วยคีย์ลับ (secret key) หากผู้ใช้พยายามเปลี่ยนแปลงข้อมูล ลายเซ็นจะไม่ถูกต้อง

ผลลัพธ์การตอบกลับเมื่อเข้าสู่ระบบจะมีลักษณะดังนี้: { "access_token": "eyJhbGciOiJIUzI1Ni...", "token_type": "bearer" }

ตอนนี้ผู้ใช้จะมีกุญแจสำหรับเข้าสู่ระบบของคุณแล้ว

ในส่วนถัดไป เราจะเรียนรู้วิธีการใช้โทเคนเหล่านี้เพื่อปกป้องเส้นทาง (routes) เฉพาะเจาะจง และการจัดการบทบาทของผู้ใช้ (user roles)

สรุปขั้นตอน:

แหล่งที่มา: https://dev.to/zeroshotanu/fastapi-for-ai-engineers-part-6-jwt-authentication-in-fastapi-5fpk

ชุมชนการเรียนรู้เพิ่มเติม (ไม่บังคับ): https://t.me/GyaanSetuAi