[python] 파이썬 FastAPI와 Authlib를 함께 사용하는 방법은?

FastAPI는 강력하고 효율적인 웹 프레임워크로, 인증과 관련된 다양한 기능을 제공하지만, 특정 인증 라이브러리를 사용하려면 추가 구현이 필요할 수 있습니다. 이를 위해 Authlib를 사용하여 FastAPI 애플리케이션에서 인증을 설정하는 방법을 알아보겠습니다.

1. Authlib 설치

Authlib는 pip를 사용하여 설치할 수 있습니다. 아래 명령을 사용하여 Authlib를 설치합니다.

pip install authlib

2. FastAPI 애플리케이션 설정

FastAPI 애플리케이션에 Authlib를 통합하기 위해 몇 가지 설정이 필요합니다.

from fastapi import FastAPI
from fastapi import Depends
from fastapi.security import OAuth2PasswordBearer
from authlib.integrations.starlette_client import OAuth

# FastAPI 애플리케이션 생성
app = FastAPI()

# Authlib OAuth2 인증 객체 생성
oauth = OAuth()

# OAuth2.0 Bearer 토큰 가져오기
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# Authlib 등록
oauth.register('google',
    client_id='YOUR_GOOGLE_CLIENT_ID',
    client_secret='YOUR_GOOGLE_CLIENT_SECRET',
    access_token_url='https://accounts.google.com/o/oauth2/token',
    access_token_params=None,
    authorize_url='https://accounts.google.com/o/oauth2/auth',
    authorize_params=None,
    api_base_url='https://www.googleapis.com/oauth2/v1/',
    client_kwargs={'scope': 'openid profile email'}
)

# Authlib OAuth2Dependency 추가
async def get_current_user(token: str = Depends(oauth2_scheme)):
    creds = {"token": {"access_token": token}}
    user = await oauth.google.get('userinfo', token=creds)
    return user.json()

# 몇 가지 예시 라우트
@app.get("/protected")
async def protected_route(user=Depends(get_current_user)):
    return {"result": "You are authenticated!"}

@app.get("/")
async def home():
    return {"result": "Hello, World!"}

위의 코드에서 YOUR_GOOGLE_CLIENT_IDYOUR_GOOGLE_CLIENT_SECRET를 실제 Google API 클라이언트 ID와 시크릿으로 대체해야 합니다. 또한 protected_route 라우트는 get_current_user 의존성을 사용하여 사용자 인증이 필요하도록 설정되어 있습니다.

3. 실행 및 테스트

FastAPI 애플리케이션을 실행하기 위해 다음 명령을 사용할 수 있습니다.

uvicorn main:app --reload

애플리케이션이 실행되면 http://localhost:8000에 접속하여 애플리케이션을 테스트할 수 있습니다. protected 경로에 대한 접근은 토큰을 사용하여 인증된 사용자에게만 허용됩니다.

결론

FastAPI와 Authlib를 함께 사용하면 강력하고 안전한 인증 시스템을 구축할 수 있습니다. 이 튜토리얼을 통해 기본적인 설정과 예시 코드를 제공했지만, 실제로 사용할 때에는 보다 더 많은 설정과 로직을 추가해야 할 수도 있습니다. 따라서 Authlib와 FastAPI 공식 문서를 참조하여 애플리케이션에 최적화된 인증 시스템을 구축하세요.

참고 자료