🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

왜 클라이언트 서버에서 토큰을 처리하는가용?

22.05.06 17:57 작성 조회수 227

0

잘 모르겠지만
설계적으로는 보안에 관련된건 서버사이드쪽에서
처리하는게 좋다고 해서
저는 지금 강사님 강의 듣고
장고에서 set_cookie를 이용해서
def access_token_issue(id):
access_payload = {"id": id,
"exp": timezone.now() + timezone.timedelta(hours=access_token_time),
"iat": timezone.now()}
access_token = jwt.encode(payload=access_payload, key=JWT_SECRET_KEY, algorithm=ALGORITHM, headers=header)

return access_token


res_cookie.set_cookie(key='access_token', 
value=access_token_issue(id=user.id),
httponly=True,
samesite=None)
이렇게 하고 있어요.
강사님의 생각을 듣고 싶습니다.

답변 1

답변을 작성해보세요.

3

안녕하세요.

JWT Token을 쿠키에 담아서 전송되게 할 수도 있고, localStorage와 같은 로컬 저장소에 담아두었다가 사용할 수도 있습니다. 쿠키 방식과 로컬스토리지 방식 모두 서버에서 토큰을 생성하여 넘겨준 것입니다.

로컬스토리지에 저장하는 토큰은 이미 서버에서 처리해서 클라이언트로 넘겨준 것을 클라이언트에서는 단지 저장할 뿐입니다.

  • 로컬스토리지 방식이 클라이언트 단에서 토큰을 저장하기에 보안에 취약하다고 하는 것은 잘못된 접근입니다. 클라이언트 단에서 토큰을 생성한 것이 아니거든요.
  • 쿠키 방식도 서버에서 설정해준 쿠키를 클라이언트에서 그대로 서버로 전달하고 있습니다.

저도 아래의 포스팅에서의 쿠키 저장방식과 로컬스토리지 저장방식에 대한 설명에 동의합니다.

https://velog.io/@0307kwon/JWT%EB%8A%94-%EC%96%B4%EB%94%94%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%B4%EC%95%BC%ED%95%A0%EA%B9%8C-localStorage-vs-cookie

위 포스팅 설명대로 쿠키 방식 로컬스토리지 방식이 모두 장단점이 있습니다. 저는 로컬스토리지 방식을 보여드린 것이구요. 쿠키 방식으로도 많이 합니다. 선택인 것이죠. 어느 하나가 무조건 나은 선택이라고 할 수는 없습니다.

---

그리고 토큰 발급은 직접 View에 어떻게 적용을 하셨나요? 가급적 jwt 라이브러리의 APIView를 그대로 쓰시어, 오버라이딩하여 Response 객체에 쿠키를 설정하시는 방식을 쓰시는 것이 라이브러리 사용 이점을 살릴 수 있습니다. django-rest-framework-jwt 라이브러리의 경우 JWT_AUTH_COOKIE 옵션을 지원해주고있고, djangorestframework-simplejwt 라이브러리는 cookie 옵션이 없네요. TokenObtainPairView 뷰의 post 메서드를 오버라이딩해보실 수 있으시겠습니다. 참고해서 구현해보세요.

화이팅입니다. :-)

채널톡 아이콘