본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 30. 02:05

AI 엔지니어를 위한 FastAPI - 파트 7: JWT 토큰을 이용한 라우트 보호

요약

FastAPI를 사용하여 JWT 토큰을 검증하고 특정 라우트를 보호하는 방법을 다룹니다. 사용자 식별을 통해 권한 없는 접근을 차단하는 보안 구현 과정을 설명합니다.

핵심 포인트

  • JWT 토큰 생성 이후의 검증 단계 중요성 설명
  • FastAPI를 활용한 엔드포인트 접근 권한 제어
  • 사용자 식별을 통한 보안 라우트 보호 구현

이전 글에서 우리는 다음 내용들을 배웠습니다:

  • 사용자 등록
  • bcrypt를 사용한 비밀번호 해싱 (Hash)
  • 로그인 시 비밀번호 검증
  • JWT 토큰 생성

하지만 토큰을 생성하는 것만으로는 애플리케이션을 안전하게 보호할 수 없습니다.

접근 권한을 부여하기 전에 토큰을 검증하지 않는다면, 누구나 여전히 엔드포인트(endpoints)에 접근할 수 있습니다.

오늘 우리는 FastAPI가 JWT 토큰으로부터 어떻게 사용자를 식별하고, 권한이 없는 접근으로부터 라우트(routes)를 보호하는지 배울 것입니다.

이 내용을 이해하기 위해 이전 게시물을 확인해 보세요:

FastAPI for AI Engineers - Part 6: JWT Authentication in FastAPI

zeroshotanu profile

Ananya S

Ananya S

Ananya S

팔로우

6월 15일

FastAPI for AI Engineers - Part 6: JWT Authentication in FastAPI

#ai #python #fastapi #backend

7개의 반응2개의 댓글

4분 읽기

문제점

다음과 같은 상황을 가정해 봅시다:

@app.get("/profile")
def get_profile():
    return {"message": "My profile"}

누구나 이 엔드포인트에 접근할 수 있습니다.

다음 사항들에 대한 검증이 전혀 없습니다:

  • 누가 요청을 보내고 있는가
  • 로그인 상태인가
  • 토큰이 유효한가

인증 흐름 (Authentication Flow)

로그인 (Login)
   ↓
JWT 생성 (Generate JWT)
...

토큰 추출하기

OAuth2PasswordBearer

OAuth2PasswordBearer는 Password flow와 Bearer 토큰을 사용하는 OAuth2를 통해 보안 및 인증을 처리하기 위해 FastAPI에서 제공하는 클래스입니다. 이 클래스는 FastAPI 애플리케이션에서 안전한 인증을 구현하는 과정을 단순화해 줍니다.

OAuth2PasswordBearer를 사용하려면 해당 클래스의 인스턴스를 생성하고 tokenUrl 파라미터를 전달해야 합니다. 이 파라미터는 클라이언트가 토큰을 얻기 위해 사용자 이름(username)과 비밀번호(password)를 보낼 URL을 지정합니다.

from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(
    tokenUrl="login"
...

요청이 도착하면:

Authorization: Bearer eyJhbGc...

FastAPI가 자동으로 토큰을 추출합니다.

JWT 토큰 디코딩 (Decoding JWT Tokens)

from jose import jwt
from jose import JWTError
def verify_token(token: str):
...

JWT에는 다음 내용이 포함되어 있습니다:

{
  "sub": "suman",
  "exp": ...
...

우리는 "sub"에서 사용자 이름(username)을 추출합니다.

get_current_user() 생성하기

이것이 가장 중요한 개념입니다.

from fastapi import Depends

def get_current_user(
...

모든 보호된 엔드포인트(protected endpoint)는 다음과 같이 사용합니다:

Depends(get_current_user)

이를 통해 등록된 사용자 중 JWT 토큰이 검증된 사용자만이 보호된 라우트(protected route)에 접근할 수 있도록 보장합니다.

라우트 보호하기 (Protecting Routes)

@app.get("/profile")
def get_profile(
    current_user: str = Depends(
...

이제:

유효한 토큰 (JWT 토큰이 일치하여 접근이 허용된 경우)

{
  "message": "Welcome suman"
}

유효하지 않은 토큰 (접근이 허용되지 않음)

{
  "detail": "Could not validate credentials"
}

시각적 흐름 (Visual Flow)

User Login
      ↓
JWT Token Generated
...

결론 (Conclusion)

오늘 우리는 다음 내용을 배웠습니다:

  • OAuth2PasswordBearer
  • JWT 토큰 추출 (Extracting JWT tokens)
  • JWT 토큰 디코딩 (Decoding JWT tokens)
  • get_current_user() 생성
  • Depends()를 사용한 라우트 보호 (Protecting routes using Depends())

다음 기사에서는 인증(authentication)을 넘어, 서로 다른 사용자에게 서로 다른 권한을 부여하는 역할 기반 액세스 제어 (RBAC, Role-Based Access Control)를 구현해 보겠습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0