Khám Phá Sức Mạnh Của Xác Thực FastAPI: Bảo Mật Các API Của Bạn Một Cách Dễ Dàng

Học cách bảo mật API của bạn với xác thực FastAPI. Hướng dẫn toàn diện này bao gồm triển khai OAuth2, băm mật khẩu và sử dụng các công cụ như Apidog.com để tối ưu hóa phát triển API. Bắt đầu với FastAPI hôm nay và xây dựng API hiệu suất cao, an toàn một cách dễ dàng.

Minh Triết

Minh Triết

4 tháng 6 2025

Khám Phá Sức Mạnh Của Xác Thực FastAPI: Bảo Mật Các API Của Bạn Một Cách Dễ Dàng

Dù bạn là một nhà phát triển kỳ cựu hay chỉ mới bắt đầu, đảm bảo rằng các API của bạn an toàn là điều hết sức quan trọng. FastAPI, một framework web hiện đại, nhanh (hiệu suất cao) để xây dựng các API với Python 3.7+, cung cấp một giải pháp xuất sắc. Hôm nay, chúng ta sẽ đi sâu vào các khía cạnh của xác thực FastAPI, khám phá cách triển khai nó và tại sao nó lại thay đổi cuộc chơi cho các dự án của bạn. Thêm vào đó, chúng ta sẽ đề cập đến cách các công cụ như Apidog có thể giúp bạn dễ dàng hơn.

button

Tại sao chọn FastAPI cho các API của bạn?

Trước khi chúng ta bắt đầu với các chi tiết cụ thể của xác thực, hãy nói về lý do bạn có thể chọn FastAPI ngay từ đầu. FastAPI được thiết kế để nhanh và đơn giản, cho phép bạn xây dựng và triển khai các API hiệu suất cao một cách nhanh chóng. Nó được xây dựng trên nền tảng Starlette cho các phần web và Pydantic cho các phần dữ liệu, nghĩa là bạn sẽ có cả tốc độ và độ tin cậy.

Framework FastAPI, hiệu suất cao, dễ học, nhanh chóng lập trình, sẵn sàng cho sản xuất

Lợi ích chính của FastAPI

  1. Hiệu suất: FastAPI là một trong những framework Python nhanh nhất hiện có.
  2. Dễ sử dụng: Cú pháp của nó trực quan và đơn giản, giúp dễ tiếp cận ngay cả với người mới bắt đầu.
  3. Tài liệu API tương tác tự động: FastAPI tự động tạo tài liệu API tương tác với Swagger UI và ReDoc.
  4. An toàn kiểu dữ liệu: Sử dụng gợi ý kiểu Python, FastAPI đảm bảo mã hóa mạnh mẽ và không có lỗi.

Tầm quan trọng của xác thực

Khi xây dựng API, bảo vệ chúng bằng các cơ chế xác thực là điều cần thiết để bảo vệ dữ liệu nhạy cảm và đảm bảo rằng chỉ những người dùng được ủy quyền mới có thể truy cập vào các điểm cuối nhất định. Xác thực giúp xác minh danh tính của người dùng hoặc hệ thống tương tác với API của bạn, cung cấp một lớp bảo mật và niềm tin.

Các loại xác thực

FastAPI hỗ trợ nhiều loại xác thực, bao gồm:

Thiết lập xác thực FastAPI

Bây giờ, hãy đi vào vấn đề chính—thiết lập xác thực trong FastAPI. Chúng ta sẽ đề cập đến một triển khai cơ bản của OAuth2 với Mật khẩu (và băm), một trong những cách phổ biến và an toàn nhất để xử lý xác thực.

Bước 1: Cài đặt FastAPI và các phụ thuộc

Đầu tiên, hãy đảm bảo rằng bạn đã cài đặt FastAPI và các phụ thuộc cần thiết. Bạn có thể làm điều này bằng cách sử dụng pip:

pip install fastapi[all] uvicorn

[all] cài đặt tất cả các phụ thuộc cần thiết cho xác thực, bao gồm pydanticpython-jose cho JWT.

Bước 2: Tạo một ứng dụng FastAPI cơ bản

Hãy bắt đầu với một ứng dụng FastAPI đơn giản. Tạo một tệp có tên main.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

Bạn có thể chạy ứng dụng này bằng cách sử dụng Uvicorn:

uvicorn main:app --reload

Bước 3: Triển khai OAuth2 với Mật khẩu

OAuth2 là một framework ủy quyền được sử dụng rộng rãi cung cấp các luồng ủy quyền cụ thể cho các loại ứng dụng khác nhau. Chúng ta sẽ sử dụng OAuth2 với Mật khẩu (và băm) để quản lý xác thực.

Tạo các mô hình người dùng

Đầu tiên, định nghĩa các mô hình người dùng của bạn. Tạo một tệp có tên models.py:

from pydantic import BaseModel

class User(BaseModel):
    username: str
    email: str
    full_name: str
    disabled: bool = False

class UserInDB(User):
    hashed_password: str

Tiện ích băm mật khẩu

Tiếp theo, bạn sẽ cần một tiện ích để băm và xác minh mật khẩu. Tạo một tệp có tên security.py:

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def verify_password(plain_password, hashed_password):
    return pwd_context.verify(plain_password, hashed_password)

def get_password_hash(password):
    return pwd_context.hash(password)

Luồng Mật khẩu OAuth2

Bây giờ, hãy cấu hình Luồng Mật khẩu OAuth2. Cập nhật tệp main.py của bạn để bao gồm các đoạn sau:

from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from jose import JWTError, jwt
from pydantic import BaseModel
from typing import Optional
import time

# Khóa bí mật để mã hóa JWT
SECRET_KEY = "your_secret_key"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# Mô phỏng cơ sở dữ liệu người dùng
fake_users_db = {
    "johndoe": {
        "username": "johndoe",
        "full_name": "John Doe",
        "email": "johndoe@example.com",
        "hashed_password": "$2b$12$...",
        "disabled": False,
    }
}

class Token(BaseModel):
    access_token: str
    token_type: str

class TokenData(BaseModel):
    username: Optional[str] = None

def authenticate_user(fake_db, username: str, password: str):
    user = fake_db.get(username)
    if not user:
        return False
    if not verify_password(password, user["hashed_password"]):
        return False
    return user

def create_access_token(data: dict, expires_delta: Optional[int] = None):
    to_encode = data.copy()
    if expires_delta:
        expire = time.time() + expires_delta
    else:
        expire = time.time() + ACCESS_TOKEN_EXPIRE_MINUTES * 60
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
    return encoded_jwt

@app.post("/token", response_model=Token)
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(fake_users_db, form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Tên người dùng hoặc mật khẩu không đúng",
            headers={"WWW-Authenticate": "Bearer"},
        )
    access_token = create_access_token(data={"sub": user["username"]})
    return {"access_token": access_token, "token_type": "bearer"}

@app.get("/users/me", response_model=User)
async def read_users_me(token: str = Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Không thể xác thực thông tin",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        username: str = payload.get("sub")
        if username is None:
            raise credentials_exception
        token_data = TokenData(username=username)
    except JWTError:
        raise credentials_exception
    user = fake_users_db.get(username, None)
    if user is None:
        raise credentials_exception
    return user

Đoạn mã này thiết lập một luồng mật khẩu OAuth2 đơn giản. Người dùng có thể nhận được một token bằng cách cung cấp tên người dùng và mật khẩu của mình đến điểm cuối /token, và họ có thể sử dụng token này để xác thực bản thân trên các điểm cuối được bảo vệ như /users/me.

Bước 4: Kiểm tra xác thực của bạn

Để kiểm tra xác thực của bạn, bạn có thể sử dụng một công cụ thử nghiệm API như Postman hoặc Apidog. Dưới đây là cách bạn có thể làm điều đó với Apidog:

Tạo một yêu cầu mới: Mở Apidog và tạo một yêu cầu mới.

Tăng cường xác thực FastAPI của bạn với Apidog

Khi FastAPI giúp việc thiết lập xác thực trở nên dễ dàng, các công cụ như Apidog có thể tối ưu hóa hơn nữa quá trình này bằng cách cung cấp một nền tảng để thiết kế, tài liệu và thử nghiệm các API của bạn. Apidog cung cấp một giao diện thân thiện với người dùng để quản lý các điểm cuối API của bạn, mô phỏng các phản hồi và hợp tác với nhóm của bạn.

Giao diện Apidog

Lợi ích của việc sử dụng Apidog

  1. Quản lý API toàn diện: Thiết kế, thử nghiệm và tài liệu hóa các API của bạn ở một nơi.
  2. Sự hợp tác: Làm việc với nhóm của bạn trong thời gian thực, chia sẻ các điểm cuối và xem xét các thay đổi.
  3. Phản hồi giả lập: Mô phỏng các phản hồi API để thử nghiệm mà không cần truy cập vào các điểm cuối thực tế.

Kết luận

FastAPI đơn giản hóa quy trình xây dựng và bảo mật các API, khiến nó trở thành lựa chọn hàng đầu cho các nhà phát triển đang tìm kiếm hiệu suất và dễ sử dụng. Bằng cách triển khai xác thực với FastAPI, bạn đảm bảo rằng các API của bạn an toàn và chỉ có thể truy cập bởi những người dùng được ủy quyền. Thêm vào đó, việc sử dụng các công cụ như Apidog có thể nâng cao trải nghiệm phát triển API của bạn bằng cách cung cấp khả năng quản lý và thử nghiệm mạnh mẽ.

Bây giờ bạn đã biết cách triển khai xác thực FastAPI, bạn có thể tự tin bảo mật các API của mình và bảo vệ dữ liệu của mình. Chúc bạn lập trình vui vẻ!

button

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API