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_ID
와 YOUR_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 공식 문서를 참조하여 애플리케이션에 최적화된 인증 시스템을 구축하세요.