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")
リクエスト URL: http://localhost:8000/login
リクエスト本文:
{ "username": "admin", "password": "admin123" }
ログインに成功すると、カードを含むアクセス トークンを受け取ります。応答。例:
{ "access_token": "xxxxxxxxxxxxx" }
次に、GET リクエストを使用してユーザー プロファイルを取得するリクエストを送信し、Authorization ヘッダーのベアラー トークンとしてアクセス トークンを送信します。以下に示すように:
リクエスト URL: http://localhost:8000/users/me
リクエスト ヘッダー: Authorization: Bearer xxxxxxxxxxxx
{ "username": "admin" }
以上がFastAPI での認証と認可に JWT トークンを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。