>백엔드 개발 >파이썬 튜토리얼 >FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법

FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법

PHPz
PHPz원래의
2023-08-01 14:21:202848검색

FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법

소개:
웹 애플리케이션이 개발되면서 사용자 인증 및 승인이 중요한 부분이 되었습니다. JWT(JSON Web Token) 토큰을 사용하여 인증 및 권한 부여 기능을 쉽게 구현할 수 있습니다. FastAPI는 인증 및 권한 부여를 처리하기 위해 간단하고 사용하기 쉬운 기능을 제공하는 최신 Python 기반 웹 프레임워크입니다. 이 기사에서는 FastAPI에서 인증 및 승인을 위해 JWT 토큰을 사용하는 방법을 설명합니다.

  1. 종속 라이브러리 설치
    먼저 FastAPI, PyJWT 및 Passlib를 포함한 일부 종속 라이브러리를 설치해야 합니다. pip 명령을 사용하여 설치할 수 있습니다:
pip install fastapi
pip install pyjwt
pip install passlib
  1. 비밀 키 생성
    JWT 토큰 서명 및 확인을 위해 비밀 키를 생성해야 합니다. 비밀 키는 다음 코드를 사용하여 생성할 수 있습니다.
import secrets

secret_key = secrets.token_urlsafe(32)
  1. Create User Model
    FastAPI에서는 애플리케이션에서 사용자를 나타내기 위해 사용자 모델을 정의해야 합니다. 다음 코드를 사용하여 사용자 모델을 생성할 수 있습니다.
from pydantic import BaseModel

class User(BaseModel):
    username: str
    password: str
  1. 라우팅 및 처리 기능 생성
    다음으로 사용자의 인증 및 승인 요청을 처리하기 위한 라우팅 및 처리 기능을 생성해야 합니다. 라우팅 및 처리 기능은 다음 코드를 사용하여 생성할 수 있습니다.
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")
  1. 함수 테스트
    이제 Postman 또는 기타 HTTP 클라이언트 도구를 사용하여 기능을 테스트할 수 있습니다. 먼저 POST 요청을 사용하여 로그인 요청을 보내고 요청 본문에 사용자 이름과 비밀번호를 포함해야 합니다. 아래와 같이

요청 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.