Cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI
Pengenalan:
Dengan pembangunan aplikasi web, pengesahan dan kebenaran pengguna telah menjadi bahagian penting. Fungsi pengesahan dan kebenaran boleh dilaksanakan dengan mudah menggunakan token JWT (JSON Web Token). FastAPI ialah rangka kerja web berasaskan Python moden yang menyediakan fungsi mudah dan mudah digunakan untuk mengendalikan pengesahan dan kebenaran. Artikel ini akan menerangkan cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI.
pip install fastapi pip install pyjwt pip install passlib
import secrets secret_key = secrets.token_urlsafe(32)
from pydantic import BaseModel class User(BaseModel): username: str password: str
from fastapi import FastAPI, HTTPException from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from passlib.context import CryptContext from datetime import datetime, timedelta import jwt app = FastAPI() pwd_context = CryptContext(schemes=["bcrypt"]) security = HTTPBearer() # 模拟数据库中的用户 users_db = { "admin": { "username": "admin", "password": pwd_context.hash("admin123") } } @app.post("/login") def login(user: User): if user.username not in users_db: raise HTTPException(status_code=401, detail="Invalid username") stored_user = users_db[user.username] if not pwd_context.verify(user.password, stored_user["password"]): raise HTTPException(status_code=401, detail="Invalid password") token = generate_token(user.username) return {"access_token": token} def generate_token(username: str) -> str: expiration = datetime.utcnow() + timedelta(minutes=30) payload = {"username": username, "exp": expiration} return jwt.encode(payload, secret_key, algorithm="HS256") @app.get("/users/me") def get_user_profile(credentials: HTTPAuthorizationCredentials = security): token = credentials.credentials try: payload = jwt.decode(token, secret_key, algorithms=["HS256"]) username = payload["username"] if username not in users_db: raise HTTPException(status_code=401, detail="Invalid username") return {"username": username} except jwt.DecodeError: raise HTTPException(status_code=401, detail="Invalid token")
Permintaan URL: http://localhost:8000/login
Request body:
{ "username": "admin", "password": "admin123" }
Selepas berjaya log masuk, kami akan menerima respons yang mengandungi token akses. Contohnya:
{ "access_token": "xxxxxxxxxxxxx" }
Kami kemudiannya boleh menghantar permintaan untuk mendapatkan profil pengguna menggunakan permintaan GET, menghantar token akses sebagai token Pembawa dalam pengepala Kebenaran. Seperti yang ditunjukkan di bawah:
URL Permintaan: http://localhost:8000/users/me
Tajuk permintaan: Keizinan: Pembawa xxxxxxxxxxxxx
Jika pengesahan token berjaya, respons akan mengembalikan objek JSON yang mengandungi nama pengguna. Contohnya:
{ "username": "admin" }
Kesimpulan:
Artikel ini menerangkan cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI. Dengan menggunakan perpustakaan PyJWT, kami menghasilkan token JWT dan menggunakan perpustakaan Passlib untuk pengesahan cincang kata laluan. Menggunakan pendekatan ini, kami boleh melaksanakan fungsi pengesahan dan kebenaran pengguna dengan mudah untuk melindungi aplikasi web kami.
Atas ialah kandungan terperinci Cara menggunakan token JWT untuk pengesahan dan kebenaran dalam FastAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!