Heim >Backend-Entwicklung >Python-Tutorial >So verwenden Sie das JWT-Token zur Authentifizierung und Autorisierung in FastAPI
So verwenden Sie JWT-Tokens zur Authentifizierung und Autorisierung in FastAPI
Einführung:
Mit der Entwicklung von Webanwendungen sind Benutzerauthentifizierung und -autorisierung zu einem wichtigen Bestandteil geworden. Authentifizierungs- und Autorisierungsfunktionen können mithilfe von JWT-Tokens (JSON Web Token) einfach implementiert werden. FastAPI ist ein modernes Python-basiertes Webframework, das einfache und benutzerfreundliche Funktionen für die Authentifizierung und Autorisierung bietet. In diesem Artikel wird erläutert, wie Sie JWT-Tokens zur Authentifizierung und Autorisierung in FastAPI verwenden.
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")
Anfrage-URL: http://localhost:8000/login
Anfragetext:
{ "username": "admin", "password": "admin123" }
Nach erfolgreicher Anmeldung erhalten wir eine Antwort mit dem Zugriffstoken. Zum Beispiel:
{ "access_token": "xxxxxxxxxxxxx" }
Anschließend können wir mithilfe einer GET-Anfrage eine Anfrage senden, um das Benutzerprofil abzurufen, und dabei das Zugriffstoken als Bearer-Token im Authorization-Header senden. Wie unten gezeigt:
Anfrage-URL: http://localhost:8000/users/me
Anfrage-Header: Autorisierung: Bearer xxxxxxxxxxxxx
Wenn die Token-Überprüfung erfolgreich ist, gibt die Antwort ein JSON-Objekt zurück, das den Benutzernamen enthält. Zum Beispiel:
{ "username": "admin" }
Fazit:
In diesem Artikel wird erläutert, wie JWT-Tokens für die Authentifizierung und Autorisierung in FastAPI verwendet werden. Mithilfe der PyJWT-Bibliothek haben wir das JWT-Token generiert und die Passlib-Bibliothek zur Passwort-Hash-Überprüfung verwendet. Mit diesem Ansatz können wir Benutzerauthentifizierungs- und Autorisierungsfunktionen einfach implementieren, um unsere Webanwendung zu sichern.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das JWT-Token zur Authentifizierung und Autorisierung in FastAPI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!