Trang Chủ

Tích hợp FastAPI với authentication bằng JWT

FastAPI JWT

Login with json-web-token in Fastapi

Intro: Quick guide to setup login with JWT in Fastapi

Thinking: với cơ chế serverless thông thường các bước xác thực User trong một service backend qua API thường diễn ra như sau:

Như chúng ta đã biết hoặc ở trang chủ của FastAPI đã viết

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.

Ở đây mình sẽ viết một quick setup để cài đặt sử dụng JWT trong FastAPI. Chủ yếu chúng ta có 2 bước:

Step1: Setup a FastAPI service

Đầu tiên, install fastapi và tạo file main.py và thêm vài dòng code để chắc chắn FastAPI chạy được

Tại giao diện CLI, run command

Mở web browser để check http://localhost:8000/docs

Call thử API xem có ra kết quả không nhé

Step2: Tạo form login

Sử dụng Pydantic để tạo form login, giờ form login chỉ cần 2 field là username và password.

Check webrower, trong request body đã show form rồi

Click Try it out, nhập thử username & password: test/test và check CLI

Step3: function verify_password

Nhập username, password tất nhiên sẽ cần 1 function để check xem username/password có đúng không, viết 1 function đơn giản check username và password có bằng admin/admin không

Logic là nếu username/password = admin/admin thì return Success, nếu không thì return 404 – User not found
Test thử trường hợp not found

Step4: Generate & return token

Khi nhập đúng username/password, api login cần trả ra JWT token, vậy nên giờ ta viết hàm gentoken

Thử call API và xem kết quả

Kết quả là chuỗi token bao gồm 3 phần

Step5: Required header Token khi call API books

Để thêm form nhập token ở Swagger và check required token, FastAPi đã tích hợp sẵn lib tiện ích là HTTPBearer.

Quay lại webrowser, có thể thấy biểu tượng khóa và button Authorize ở góc trên bên phải

Call thử API /books mà không nhập token, sẽ thấy response "detail": "Not authenticated"

Step6: validate_token

Sau khi hiểu sơ qua công dụng của HTTPBearer, ta sử dụng nó để get token và check tính hợp lệ

Quay lại webrowser, call APi login để get token và nhập token đó để call API /books xem sao nhé.

Conclusion

Tích hợp JWT vào FastAPI khá là đơn giản, điều quan trọng là chúng ta cần biết sử dụng HTTPBearer và dependencies là những công cụ có sẵn được cung cấp bởi framework.
Ngoài ra nếu được có thể tìm hiểu thêm về cơ chế hoạt động của lib PyJWT tại https://pyjwt.readthedocs.io/en/stable/

Run this project

Để run project này:

Chia sẻ bài viết ngay