JWT은 JSON Web Token으로 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미합니다. 주로 사용자의 authentication(로그인과 같은 인증)과 authorization(권한 부여와 같은 인가) 정보를 서버와 클라이언트 간에 안전하게 주고 받기 위해서 사용된다고 볼 수 있습니다. JWT는 .(dot)을 구분자로 나누어지는 세 가지 문자열의 조합인데, .(dot)을 기준으로 좌측부터 헤더(Header), 내용(Payload), 서명(Signature)를 의미합니다.
꼬리 질문
JWT를 사용해 본 경험에 대해 말씀해주세요
기존의 웹에서는 쿠키(cookie)와 세션(session)을 통한 사용자 인증을 구현하는 경우가 많았는데, 그와 비교하자면 JWT는 어떤 장점이 있나요?
JWT는 토큰 자체에 사용자 정보가 저장되어 있어서 서버 입장에서 토큰 검증만 해주면 되는 반면, 쿠키와 세션은 서버 단에 로그인한 모든 사용자의 세션을 DB나 캐시(cache)에 저장해놓고 쿠키로 넘어온 세션 ID로 사용자 데이터를 매번 조회해야 하는 번거로움이 있습니다.
토큰 탈취의 위험성 때문에 Access Token, Refresh Token 이중으로 나누어 인증을 하기도 하는데, 이 두 가지 토큰에 대해 간략하게 설명해주세요
Access Token : 클라이언트가 갖고있는 실제로 유저의 정보가 담긴 토큰으로, 클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용하여 사용자 정보에 맞게 응답을 진행
Refresh Token: 새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용. 해당 토큰은 보통 데이터베이스에 유저 정보와 같이 기록.
정리하자면, Access Token은 접근에 관여하는 토큰, Refresh Token은 재발급에 관여하는 토큰의 역할로 사용되는 JWT 이라고 말할 수 있다.