FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법
소개:
웹 애플리케이션이 개발되면서 사용자 인증 및 승인이 중요한 부분이 되었습니다. JWT(JSON Web Token) 토큰을 사용하여 인증 및 권한 부여 기능을 쉽게 구현할 수 있습니다. FastAPI는 인증 및 권한 부여를 처리하기 위해 간단하고 사용하기 쉬운 기능을 제공하는 최신 Python 기반 웹 프레임워크입니다. 이 기사에서는 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 헤더의 Bearer 토큰으로 액세스 토큰을 보낼 수 있습니다. 아래와 같이:
요청 URL: http://localhost:8000/users/me
요청 헤더: 승인: Bearer xxxxxxxxxxxxx
토큰 확인에 성공하면 응답은 사용자 이름이 포함된 JSON 개체를 반환합니다. 예:
{ "username": "admin" }
결론:
이 문서에서는 FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법을 설명합니다. PyJWT 라이브러리를 사용하여 JWT 토큰을 생성하고 비밀번호 해시 확인을 위해 Passlib 라이브러리를 사용했습니다. 이 접근 방식을 사용하면 사용자 인증 및 권한 부여 기능을 쉽게 구현하여 웹 애플리케이션을 보호할 수 있습니다.
위 내용은 FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!