인프런 커뮤니티 질문&답변

lano님의 프로필 이미지
lano

작성한 질문수

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

JWT에 대하여

jwt의 payload에 넣는 정보

작성

·

381

0

안녕하세요 강사님 좋은 강의를 제공해주셔서 감사합니다.

JWT는 header, payload는 base64 방식으로 인코딩 되는데 이 방식은 쉽게 복호화가 가능한 것으로 알고 있습니다.

그렇기 때문에 JWT를 클라이언트로 보내줄 때 payload에 mongodb의 _id, rdb의 primary key를 넣어주는 것은 좋지 않다고 생각합니다. 물론 강의는 학습을 위한 프로젝트이기 때문에 payload에 그런 것들을 노출 시킨 것은 알고있습니다.

그렇다면 실무에서는 payload에 어떤 값을 넣어주는 것이 적절한지 궁금해서 질문을 남깁니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
lano님, 질문해 주셔서 감사합니다.

실무에서 JWT의 payload에 어떤 정보를 넣는지는 보안 요구 사항과 애플리케이션의 요구 사항에 따라 다를 수 있습니다. 그러나 중요한 것은 인코딩은 데이터를 보호하는 방식이 아니라 단순히 데이터 형식을 변환하는 것임을 기억해야 합니다. 따라서 payload에는 민감한 정보를 담지 않거나, 담아야 한다면 암호화하는 것이 좋습니다.

일반적으로 payload에는 사용자를 식별할 수 있는 고유한 ID(중요한 것은 이 ID가 데이터베이스의 primary key와 직접 연결되지 않는 것이 좋습니다), 사용자의 역할이나 권한 정보, 토큰의 발급 시간 및 만료 시간과 같은 클레임(claims)을 담습니다. 사용자 세션을 관리하거나, 사용자의 상태를 유지하기 위한 정보를 넣기도 합니다. 하지만 이러한 정보도 필요한 최소한의 정보로 제한하고, 가능하다면 정보가 외부에 노출되어도 안전하도록 처리하는 것이 중요합니다.

실무에서는 JWT 토큰의 보안을 강화하기 위해 다음과 같은 접근 방식을 고려할 수 있습니다:

  1. HTTPS를 사용하여 토큰의 안전한 전송 보장: 통신 과정에서 토큰이 도청되는 것을 방지하기 위해 HTTPS를 사용합니다.
  2. 토큰 만료 시간 짧게 설정: 토큰의 만료 시간을 짧게 설정하여, 토큰이 탈취되어도 제한된 시간 동안만 유효하게 합니다.
  3. Refresh Token 사용: 보안성을 높이기 위해 짧은 만료 시간을 가진 Access Token와 별도로 장시간 유효한 Refresh Token을 발급하여, Access Token이 만료되면 Refresh Token으로 새로운 Access Token을 발급 받을 수 있도록 합니다.

JWT를 사용할 때는 이러한 보안 사항을 고려하여 안전하게 정보를 관리하는 것이 중요합니다.

lano님의 프로필 이미지
lano

작성한 질문수

질문하기