JWT 알고 썼을까?

ezi·2024년 6월 19일

JWT? Json Web Token

JWT 토큰

JWT(Json Web Token)은 Json 객체에 인증에 필요한 정보들을 담은 후 비밀키로 서명한 토큰으로, 인터넷 표준 인증 방식이다.
공식적으로 인증(Authentication) & 권한허가(Authorization) 방식으로 사용된다.

[JWT를 발급받기까지의 (로그인 전)과정]
1. 사용자가 서버에 로그인 요청을 보낸다.
2. 서버는 비밀키를 사용해 json 객체를 암호화한 JWT 토큰을 발급한다.
3. JWT를 헤더에 담아 클라이언트에 보낸다.

[JWT를 발급받은 후 (로그인 후)과정]
4.클라이언트는 JWT를 로컬에 저장해놓는다.
5.API 호출을 할 때마다 header에 JWT를 실어 보낸다.
6. 서버는 헤더를 매번 확인하여 사용자가 신뢰할만한지 체크하고, 인증이 되면 API에 대한 응답을 보낸다.

그런데 로그인 후에 왜 매번 JWT를 헤더에 넣어서 보내야 할까? 비효율적이라는 생각이 들 수 있다. 매번 인증 과정을 거쳐야하는 이유는 HTTP의 특성 때문이다.

HTTP의 특성

Connectionless : 한 번 통신이 이뤄지고 난 후에 연결이 바로 끊어진다
Stateless : 이전 상태를 유지/기억하지 않는다

인터넷을 사용하는 우리는 HTTP 프로토콜을 사용해서 통신을 한다. 웹 페이지를 열 때도, 핸드폰 어플을 사용할 때도, 클라우드를 사용할 때도 HTTP 통신으로 서버와 클라이언트가 데이터를 주고 받는다.

그런데 이런 HTTP는 connectionless하고 stateless하다는 특성이 있다.
쉽게 설명하면 한 번 통신이 일어나고 나면 연결이 끊어진다는 것이고, 다시 연결해도 이전 상태를 유지하지 않아 과거에 어떤 정보를 보냈었는지 기억하지 못한다는 것이다.

즉, 화면을 이동하며 새로운 API를 요청하면 다시 신뢰할만한 사용자인지 인증하는 과정을 거쳐야하는 것이다.

매번 사용자가 인증하는 과정은 귀찮을 뿐만 아니라 통신이 느려지는 문제가 될 수 있다.
따라서 인증된 사용자가 어느 정도 기간동안 재인증 하지 않아도 되도록(로그인이 유지되도록) 만든 것이 Access Token이다.

JWT의 구조

JWT는 Header, Payload, Signature 3개로 구성되어 있다.

정리

  • 사용 목적 : JWT 토큰은 사용자 인증과 로그인 유지를 위해 쓰인다
  • 토큰의 구조 : Header, Payload, Signature
    - Header: 서명 알고리즘 (공개키/개인키 or 비밀키)
    - Payload : 토큰 정보(대상, 발급시각, 만료시각)
    - Signature : (Header+Payload) 서명 (인증용)
  • 장단점
    - 장점 : 네트워크 부하가 적고 모바일 앱에 사용하기 적합하다
    - 단점 : 토큰 크기를 신경써야하고, 만료 기간 처리를 따로 해줘야한다
profile
차곡차곡

0개의 댓글