카테고리 없음

액세스 토큰을 cookie에 저장하는 방법

태영9922 2024. 6. 19. 14:41
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)):
    # 토큰 검증 및 인증 로직
    # ...