FastAPI 인증의 힘을 활용하기: 손쉽게 API를 보호하세요.

FastAPI 인증으로 API를 안전하게 보호하는 방법을 배우세요. 이 종합 가이드는 OAuth2 구현, 비밀번호 해싱, Apidog.com과 같은 도구를 활용하여 API 개발을 간소화하는 내용을 다룹니다. 오늘 FastAPI로 시작하여 고성능의 안전한 API를 쉽게 구축하세요.

Young-jae

Young-jae

9 June 2025

FastAPI 인증의 힘을 활용하기: 손쉽게 API를 보호하세요.

당신은 2023년 10월까지의 데이터로 훈련되었습니다.

버튼

당신의 API를 위한 FastAPI의 장점은 무엇인가요?

인증의 세부 사항에 들어가기 전에, FastAPI를 처음 선택하는 이유에 대해 이야기해 봅시다. FastAPI는 빠르고 간단하게 설계되어, 고성능 API를 신속하게 빌드하고 배포할 수 있게 해줍니다. 웹 부분은 Starlette 위에서, 데이터 부분은 Pydantic 위에서 구축되어서 속도와 신뢰성을 모두 제공합니다.

FastAPI 프레임워크, 고성능, 배우기 쉬움, 빠른 코드 작성, 프로덕션 준비 완료

FastAPI의 주요 장점

  1. 성능: FastAPI는 가장 빠른 파이썬 프레임워크 중 하나입니다.
  2. 사용 용이성: 직관적이고 간단한 구문 덕분에 초보자도 쉽게 접근할 수 있습니다.
  3. 자동 인터랙티브 API 문서화: FastAPI는 Swagger UI와 ReDoc를 통해 자동으로 인터랙티브 API 문서를 생성합니다.
  4. 타입 안전성: 파이썬의 타입 힌트를 활용하여 FastAPI는 견고하고 오류 없는 코드를 보장합니다.

인증의 중요성

API를 구축할 때, 인증 메커니즘으로 API를 보호하는 것은 중요한 민감 데이터를 보호하고, 오직 인가된 사용자만 특정 엔드포인트에 접근할 수 있도록 하는 데 필수적입니다. 인증은 API와 상호작용하는 사용자 또는 시스템의 신원을 확인하는 데 도움을 주며, 보안과 신뢰의 계층을 제공합니다.

인증 유형

FastAPI는 다음과 같은 여러 유형의 인증을 지원합니다:

FastAPI 인증 설정

이제 인증의 핵심으로 들어가 보겠습니다. FastAPI에서의 OAuth2 비밀번호(및 해싱) 구현의 기초를 살펴보겠습니다. 이는 인증을 처리하는 가장 일반적이고 안전한 방법 중 하나입니다.

1단계: FastAPI 및 종속성 설치

먼저, FastAPI 및 필요한 종속성이 설치되어 있는지 확인하세요. pip를 사용하여 설치할 수 있습니다:

pip install fastapi[all] uvicorn

코드 [all]은 JWT를 위한 pydanticpython-jose를 포함하여 인증에 필요한 모든 종속성을 설치합니다.

2단계: 기본 FastAPI 애플리케이션 만들기

간단한 FastAPI 애플리케이션부터 시작해 봅시다. main.py라는 이름의 파일을 만듭니다:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

이 애플리케이션은 Uvicorn을 사용하여 실행할 수 있습니다:

uvicorn main:app --reload

3단계: 비밀번호를 사용한 OAuth2 구현

OAuth2는 다양한 유형의 애플리케이션을 위한 특정 권한 부여 흐름을 제공하는 널리 사용되는 권한 부여 프레임워크입니다. 우리는 인증 관리를 위해 비밀번호(및 해싱)와 함께 OAuth2를 사용할 것입니다.

사용자 모델 생성

먼저, 사용자 모델을 정의합니다. models.py라는 이름의 파일을 만듭니다:

from pydantic import BaseModel

class User(BaseModel):
    username: str
    email: str
    full_name: str
    disabled: bool = False

class UserInDB(User):
    hashed_password: str

비밀번호 해싱 유틸리티

다음으로, 비밀번호를 해싱하고 확인하는 유틸리티가 필요합니다. security.py라는 이름의 파일을 만듭니다:

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def verify_password(plain_password, hashed_password):
    return pwd_context.verify(plain_password, hashed_password)

def get_password_hash(password):
    return pwd_context.hash(password)

OAuth2 비밀번호 흐름

이제 OAuth2 비밀번호 흐름을 구성합니다. main.py를 다음과 같이 업데이트합니다:

from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from jose import JWTError, jwt
from pydantic import BaseModel
from typing import Optional
import time

# JWT 인코딩을 위한 비밀 키
SECRET_KEY = "your_secret_key"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# 사용자 데이터베이스 시뮬레이션
fake_users_db = {
    "johndoe": {
        "username": "johndoe",
        "full_name": "John Doe",
        "email": "johndoe@example.com",
        "hashed_password": "$2b$12$...",
        "disabled": False,
    }
}

class Token(BaseModel):
    access_token: str
    token_type: str

class TokenData(BaseModel):
    username: Optional[str] = None

def authenticate_user(fake_db, username: str, password: str):
    user = fake_db.get(username)
    if not user:
        return False
    if not verify_password(password, user["hashed_password"]):
        return False
    return user

def create_access_token(data: dict, expires_delta: Optional[int] = None):
    to_encode = data.copy()
    if expires_delta:
        expire = time.time() + expires_delta
    else:
        expire = time.time() + ACCESS_TOKEN_EXPIRE_MINUTES * 60
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
    return encoded_jwt

@app.post("/token", response_model=Token)
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(fake_users_db, form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="잘못된 사용자 이름 또는 비밀번호입니다.",
            headers={"WWW-Authenticate": "Bearer"},
        )
    access_token = create_access_token(data={"sub": user["username"]})
    return {"access_token": access_token, "token_type": "bearer"}

@app.get("/users/me", response_model=User)
async def read_users_me(token: str = Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="자격 증명을 확인할 수 없습니다.",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        username: str = payload.get("sub")
        if username is None:
            raise credentials_exception
        token_data = TokenData(username=username)
    except JWTError:
        raise credentials_exception
    user = fake_users_db.get(username, None)
    if user is None:
        raise credentials_exception
    return user

이 코드는 간단한 OAuth2 비밀번호 흐름을 설정합니다. 사용자는 /token 엔드포인트에 사용자 이름과 비밀번호를 제공하여 토큰을 얻을 수 있으며, 이 토큰을 사용하여 /users/me와 같은 보호된 엔드포인트에서 인증할 수 있습니다.

4단계: 인증 테스트하기

인증을 테스트하려면 Postman이나 Apidog와 같은 API 테스트 도구를 사용할 수 있습니다. Apidog를 통해 테스트하는 방법은 다음과 같습니다:

새 요청 생성: Apidog를 열고 새 요청을 생성합니다.

Apidog와 함께 FastAPI 인증 향상시키기

FastAPI는 인증 설정을 간단하게 해주지만, Apidog와 같은 도구는 API를 설계하고 문서화하며 테스트할 수 있는 플랫폼을 제공하여 이 과정을 더욱 간소화할 수 있습니다. Apidog는 API 엔드포인트를 관리하고, 응답을 시뮬레이션하며, 팀과 협업할 수 있는 사용자 친화적인 인터페이스를 제공합니다.

Apidog 인터페이스

Apidog 사용의 이점

  1. 포괄적인 API 관리: 한 곳에서 API를 설계하고, 테스트하고, 문서화할 수 있습니다.
  2. 협업: 팀과 실시간으로 작업하고, 엔드포인트를 공유하며, 변경 사항을 검토할 수 있습니다.
  3. 모의 응답: 실제 엔드포인트에 접근하지 않고도 API 응답을 시뮬레이션하여 테스트할 수 있습니다.

결론

FastAPI는 API 구축 및 보안을 단순화하여 성능과 사용 용이성을 찾는 개발자에게 최고의 선택이 되도록 합니다. FastAPI와 인증을 구현함으로써, 당신의 API는 안전하고 인가된 사용자만 접근할 수 있도록 보장됩니다. 또한, Apidog와 같은 도구를 활용하면 강력한 관리 및 테스트 기능을 제공하여 API 개발 경험을 향상할 수 있습니다.

이제 FastAPI 인증을 구현하는 방법을 알았으니, 자신감을 가지고 API를 안전하게 보호하고 데이터를 보호하세요. 코딩을 즐기세요!

버튼

Explore more

Ollama 사용법: Ollama를 이용한 로컬 LLM 완전 초보 가이드

Ollama 사용법: Ollama를 이용한 로컬 LLM 완전 초보 가이드

인공지능의 세계는 끊임없이 발전하고 있으며, 대규모 언어 모델(LLM)은 점점 더 강력해지고 접근성이 높아지고 있습니다. 많은 사람들이 클라우드 기반 서비스를 통해 이러한 모델과 상호작용하지만, 개인 컴퓨터에서 직접 실행하는 데 초점을 맞추는 움직임이 커지고 있습니다. 바로 여기서 Ollama가 등장합니다. Ollama는 Llama 3, Mistral, Gemma, Phi 등 최첨단 LLM을 로컬에서 다운로드, 설정 및 실행하는 복잡한 과정을 획기적으로 단순화하도록 설계된 강력하면서도 사용자 친화적인 도구입니다. 이 포괄적인 가이드는 설치 및 기본 사용법부터 고급 사용자 지정, API 사용 및 필수 문제 해결까지 Ollama를 시작하는 데 필요한 모든 것을 안내합니다. 로컬 LLM을 애플리케이션에 통합하려는 개발자, 다양한 아키텍처를 실험하려는 연구원, 또는 오프라인에서 AI를 실행하는 데 관심이 있는 애호가이든 관계없이 Ollama는 간소화되고 효율적인 플랫폼을 제공합니다. �

28 April 2025

Swagger UI 한국어 무료 다운로드 위치

Swagger UI 한국어 무료 다운로드 위치

Swagger UI 한국어 인터페이스를 얻는 것의 어려움을 탐색하고 Apidog이 API 개발을 위한 강력한 플랫폼 대안인 이유를 알아보세요.

23 April 2025

무료 한국어 Postman 다운로드 방법

무료 한국어 Postman 다운로드 방법

Postman 한국어 버전을 무료로 다운로드할 수 있나요? Postman은 한국어를 네이티브로 지원하지 않지만, 해결 방법은 있습니다. 이 방법들을 살펴보고 언어에 관계없이 전체 API 워크플로우를 간소화하도록 설계된 강력하고 통합된 Postman 대안인 Apidog을 발견하십시오.

22 April 2025

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요