> 백엔드 개발 > 파이썬 튜토리얼 > FastAPI에서 요청 인증 및 승인을 구현하는 방법

FastAPI에서 요청 인증 및 승인을 구현하는 방법

王林
풀어 주다: 2023-07-29 16:39:20
원래의
1637명이 탐색했습니다.

FastAPI에서 요청 인증 및 승인을 구현하는 방법

인터넷이 발전하면서 네트워크 보안 문제가 점점 더 주목을 받고 있습니다. 웹 애플리케이션을 개발할 때 인증 및 권한 부여를 요청하는 것은 애플리케이션 보안을 보장하는 중요한 부분입니다. 이 기사에서는 FastAPI 프레임워크에서 요청 인증 및 권한 부여를 구현하는 방법을 소개합니다.

FastAPI는 웹 API를 생성하는 간단하고 강력한 방법을 제공하는 고성능 Python 기반 웹 프레임워크입니다. Pydantic 라이브러리와 Starlette 프레임워크를 통합하여 개발 프로세스를 더욱 쉽고 효율적으로 만듭니다.

  1. 종속성 설치

먼저 FastAPI와 해당 종속성을 설치해야 합니다. 다음 명령을 통해 설치할 수 있습니다.

$ pip install fastapi
$ pip install uvicorn
로그인 후 복사
  1. 기본 애플리케이션 만들기

다음으로 간단한 FastAPI 애플리케이션을 만들고 몇 가지 기본 경로와 엔드포인트를 추가합니다. 이 예에서는 "app.py"라는 파일을 만들고 다음 코드를 파일에 복사합니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}
로그인 후 복사
  1. Add Authentication and Authorization

다음으로 FastAPI의 보안 기능을 사용하여 요청 인증을 구현하는 방법과 권한 부여. 인증 및 권한 부여를 위한 메커니즘으로 OAuth2.0을 사용합니다.

먼저 관련 모듈과 클래스를 가져와야 합니다.

from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from passlib.context import CryptContext
로그인 후 복사

그런 다음 비밀번호 암호화 컨텍스트를 만듭니다.

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
로그인 후 복사

다음으로 사용자 인증을 위한 사용자 모델을 정의합니다.

class User:
    def __init__(self, username: str, password: str, disabled: bool = False):
        self.username = username
        self.password = pwd_context.hash(password)
        self.disabled = disabled

    def verify_password(self, password: str):
        return pwd_context.verify(password, self.password)

    def get_user(self, username: str):
        if self.username == username:
            return self
로그인 후 복사

그런 다음 더미를 만듭니다. 테스트 목적으로 데이터베이스를 만들고 일부 사용자 정보를 추가합니다.

fake_db = [
    User(username="user1", password="password"),
    User(username="user2", password="password", disabled=True)
]
로그인 후 복사

다음으로 사용자의 자격 증명을 확인하는 함수를 정의합니다.

def authenticate_user(username: str, password: str):
    user = get_user(username)
    if not user:
        return False
    if not user.verify_password(password):
        return False
    return user
로그인 후 복사

그런 다음 현재 사용자를 가져오는 함수를 정의합니다.

def get_current_user(token: str = Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    user = authenticate_user(token)
    if not user:
        raise credentials_exception
    return user
로그인 후 복사

마지막으로 다음 함수를 적용합니다. FastAPI 애플리케이션에:

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")

@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid username or password",
            headers={"WWW-Authenticate": "Bearer"},
        )
    return {"access_token": str(user.username), "token_type": "bearer"}

@app.get("/items/")
async def read_items(current_user: User = Depends(get_current_user)):
    return {"items": [{"item_id": "Item 1"}, {"item_id": "Item 2"}]}
로그인 후 복사
  1. 애플리케이션 테스트

이제 애플리케이션을 실행하고 테스트할 수 있습니다. 다음 명령을 실행하여 애플리케이션을 시작합니다.

$ uvicorn app:app --reload
로그인 후 복사

다음으로, 컬이나 HTTP 클라이언트 도구를 사용하여 애플리케이션을 테스트할 수 있습니다. 먼저 액세스 토큰을 가져와야 합니다.

$ curl --request POST --url http://localhost:8000/token --header 'Content-Type: application/x-www-form-urlencoded' --data 'username=user1&password=password'
로그인 후 복사

수신되는 응답은 다음과 같아야 합니다.

{"access_token":"user1","token_type":"bearer"}
로그인 후 복사

그런 다음 제한된 엔드포인트에 액세스하기 위해 얻은 액세스 토큰을 사용할 수 있습니다.

$ curl --request GET --url http://localhost:8000/items/ --header 'Authorization: Bearer user1'
로그인 후 복사

다음과 같은 응답을 받아야 합니다.

{"items":[{"item_id":"Item 1"},{"item_id":"Item 2"}]}
로그인 후 복사

그래서 우리는 FastAPI 애플리케이션에서 요청 인증 및 승인을 성공적으로 구현했습니다.

요약:

이 문서에서는 FastAPI 프레임워크에서 요청 인증 및 권한 부여를 구현하는 방법을 설명합니다. 우리는 FastAPI의 보안 기능을 사용하고 OAuth2.0 메커니즘을 통해 인증 및 권한 부여를 수행합니다. 관련 모듈 및 클래스 가져오기, 비밀번호 암호화 컨텍스트 생성, 사용자 모델 및 검증 기능 정의를 통해 요청된 인증 기능이 구현됩니다. 마지막으로 이러한 기능을 FastAPI 애플리케이션에 적용하고 테스트했습니다. 이러한 단계를 통해 우리는 안전하고 안정적인 웹 애플리케이션을 구축할 수 있습니다.

위 내용은 FastAPI에서 요청 인증 및 승인을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿