如何在FastAPI中使用JWT令牌進行身份驗證和授權
簡介:
隨著Web應用程式的發展,使用者身份驗證和授權成為了至關重要的部分。使用JWT(JSON Web Token)令牌可以輕鬆實現身份驗證和授權功能。 FastAPI是一個基於Python的現代Web框架,它提供了簡單易用的功能來處理身份驗證和授權。本文將介紹如何在FastAPI中使用JWT令牌進行身份驗證和授權。
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")
請求網址:http://localhost:8000/login
請求體:
{ "username": "admin", "password": "admin123" }
成功登入後,我們將收到一個包含存取令牌的響應。例如:
{ "access_token": "xxxxxxxxxxxxx" }
然後,我們可以使用GET請求發送獲取使用者資料的請求,將存取權杖作為Authorization頭部的Bearer令牌發送。如下所示:
請求URL:http://localhost:8000/users/me
#請求頭部:Authorization: Bearer xxxxxxxxxxxxx
如果令牌驗證成功,回應將傳回一個包含使用者名稱的JSON物件。例如:
{ "username": "admin" }
結束語:
本文介紹如何在FastAPI中使用JWT令牌進行身份驗證和授權。透過使用PyJWT函式庫,我們產生了JWT令牌,並使用Passlib函式庫進行密碼雜湊驗證。使用這種方法,我們可以輕鬆地實現使用者身份驗證和授權功能,從而保護我們的網路應用程式。
以上是如何在FastAPI中使用JWT令牌進行身份驗證和授權的詳細內容。更多資訊請關注PHP中文網其他相關文章!