JWT

이준교·2023년 7월 2일
0

JWT란?

  • JWT(Json Web Token)는 말그대로 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격
    사용자의 인증 또는 인가 방식의 대표적인 쿠키,세션,토큰 방식 중 JSON 형식으로 암호화 시킨 JSON 토큰을 사용하여 인증, 인가를 진행

JWT의 구조는?

  • 헤더(header), 페이로드(payload), 서명(signature) 로 구분

헤더 : 토큰의 유형과 서명 알고리즘이 명시

{
"alg" : "HS256",
"typ" : " JWT"
}

페이로드 : 암호화하여 전달할 데이터

{
"sub" : "123456798"
"username" : "구름",
"iat" : 15214300000",
}

서명 : 헤더에서 정의한 알고리즘 방식으로 암호화되어 저장(헤더+페이로드+key 값)

서버에서 토큰 발행 시 지정한 키를 사용하여 복호화하여 위변조 여부를 확인
그렇기 때문에 해당 키값은 노출되지 않도록 관리하며 쉽게 유추가 어렵게 설정하는게 좋다

자주 사용되는 키 이름

  • sub : 인증 주체(subject)
  • iss : 토큰 발급처
  • typ : 토큰의 유형
  • alg : 서명 알고리즘
  • iat : 토큰 발급 시각
  • exp : 만료 시간
  • aud : 클라이언트

JWT의 장점과 단점은?

장점

  • 토큰 자체에 사용자의 정보를 저장 할 수 있어 확장성이 우수하고 별도의 저장공간이 필요없음
  • 세션에 비해 비교적 빠른 인증처리가 가능함
  • 세션 사용이 불가한 모바일 환경에서도 사용 가능

단점

  • 클라이언트 측에서 관리하고 저장되므로 중요한 정보는 전달하기 힘들다.
  • 특정 토큰을 만료시키기 어렵기 때문에 보안에서 완벽하다고 할 수 없음
  • 저장하려는 정보가 늘어날수록 토큰 자체의 길이가 길어지며 네트워크에 부하를 줄 수 있다.

accessToken 과 refreshToken이란?

위에서 언급된 토큰이 탈취 시 삭제가 어려운 단점을 보완하기 위해 사용되는 방식
accessToken의 만료시간을 짧게 가져가 혹 탈취당하더라도 짧은 시간안에 강제로 만료시켜 사용 불가하게 만듬
accessToken이 만료된 사용자는 같이 발급받은 refreshToken을 통해 인증을 받고 새로 accessToken을 발급

profile
어떻게든 해내는 개발자, 이준교입니다

0개의 댓글