def login(response:Response....):
access_token = manager.create_access_token(
data={"sub": {"id": user["id"], "name": user["name"], "email": user["email"]} } )
# access_token 발급
response.set_cookie(key="access_token",value=access_token,httponly=True)
1. 서버에서 쿠키 설정: 서버에서 사용자 인증 후, JWT 토큰을 생성하고 이를 쿠키에 저장해야 합니다.
이를 위해 HTTP 응답 헤더에 **Set-Cookie**를 설정하여 토큰을 전달합니다.
FastAPI에서는 response.set_cookie() 메소드를 사용하여 쿠키를 설정할 수 있습니다.
2. 클라이언트에서 쿠키 사용: 클라이언트에서는 서버로부터 받은 쿠키를 사용하여 토큰을 저장하고 관리합니다.
쿠키는 브라우저에 의해 자동으로 저장되며, 서버로 요청을 보낼 때마다 쿠키가 자동으로 포함됩니다.
따라서 클라이언트에서 별도의 작업이 필요 없습니다.
3. 서버에서 쿠키 읽기: 서버에서는 클라이언트로부터 받은 요청의 쿠키를 확인하여 JWT 토큰을 추출하고 인증을 진행해야 합니다. FastAPI에서는 Request 객체를 사용하여 쿠키를 읽을 수 있습니다.
단, 쿠키를 사용할 때 HttpOnly와 Secure 플래그를 설정하여 쿠키의 보안을 강화해야 합니다.
from fastapi import FastAPI, Response, Request, Depends
import jwt
app = FastAPI()
@app.post("/login")
async def login(response: Response):
# 사용자 인증 로직
# ...
# JWT 토큰 생성
token = jwt.encode({"user_id": user_id}, SECRET_KEY, algorithm="HS256")
# 응답 헤더에 쿠키 설정
response.set_cookie(key="access_token", value=token)
return {"message": "로그인 성공"}
async def get_token(request: Request):
return request.cookies.get("access_token")
@app.get("/protected")
async def protected_route(token: str = Depends(get_token)):
# 토큰 검증 및 인증 로직
# ...