JWT가 뭘까

강지원·2022년 1월 9일
1
post-thumbnail

JWT란

JSON Web Token 약자로 모바일이나 웹의 사용자 인증을 위해
사용하는 암호화된 토큰을 의미.

JWT 정보를 request에 담아 사용자의 정보 열람, 수정 등을
수행할 수 있게 한다.

JWT의 구조

JWT는 세 파트로 나누어지고, 각 파트는 .(점)으로 구분하여 aaaaa.bbbbb.ccccc 이런식으로 표현한다.
JWT는 URL에서 파라미터로 사용할 수 있도록
URL_Safe 한 Base64url 인코딩을 사용한다.

1)HEADER: 서명(id,password)에 해당하는 부분을 암호화 시킬 필요가 있는데 해독 알고리즘 정보가 담겨있다.

2)PAYLOAD: 토큰에 담을 정보가 들어있는 부분.
여기에 담은 정보의 한’조각’을 클레임(claim)이라고 부르고
이는 name/value 의 형태로 구성되어 있다.
클레임의 종류는 등록된(registered)클레임, 공개(public)클레임,
비공개(private)클레임이 존재.

{

  "sub": "1234567890", // 등록된 플레임
  "name": "John Doe", // 비공개 플레임
  "iat": 1516239022  // 등록된 플레임
}

3)SIGNATURE: 서명 (ID+PASSWORD)
서명은 [헤더 base64 + 페이로드 base64 + SECRET_KEY ] 를 사용하여
JWT 백엔드에서 발행한다.

각 요청시 서명이 확인되고 헤더 또는 페이로드의 정보가
클라이언트에 의해 변경된 경우 서명이 무효화된다.


JWT의 과정

1.브라우저의 로그인과정에서 회원정보를 입력한다.(ID,PASSWORD)
2.서버는 JWT를 생성한다.
3.서버는 브라우저에게 JWT를 보낸다.
4.브라우저는 JWT를 가지고 서버에게 데이터를 요청.
5.서버는 서명을 확인하고 유저 정보를 클라이언트에게 제공.

JWT의 특징

토큰 기반 시스템은 stateless하다.
유저의 인정 정보를 서버나 세션에 담아두지 않기 때문에
인정정보를 서버에 담아둠으로써 발생하는 많은 문제점들이 해소된다.


JWT의 장점

  1. 무상태(stateless), 확장성이 있다.
    기존 서버에 세션을 저장하는 방식에서 서버 여러대를 사용하여
    요청을 분산하였다면
    어떤 유저가 로그인했을 때 그 유저는 처음 로그인한 서버에만
    요청을 내보내도록 설정해야한다.
    하지만 토큰을 사용했고, 토큰 값만 알고 있다면 어떤 서버로
    요청이 들어가던 상관이 없다는 거다.
    = 세션스토리지가 필요없다

  2. 보안성 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써
    발생하는 취약점이 사라진다.

  3. 여러 플랫폼 및 도메인 어플리케이션 규모가 커지면
    여러 디바이스를 호환 시키고 더 많은 종류의 서비스를 제공한다.
    이 때, 토큰을 사용한다면 그 어떤 디바이스나 도메인에서도
    토큰만 유효하다면 요청이 정상적으로 처리된다.


JWT를 활용하는 방법

  1. 정보 교류:
    JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다.
    요즈음에는 인증을 위한 업계 표준 프로토콜 인 OAuth2 로 수행된다.


  2. Service to Service인증:
    예를 들어 Login with Google과 같은 로그인 옵션을 제공하는데
    이와 같은 회원 인증이 JWT 를 사용하는 가장 흔한 방법 중 하나이다.
    사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로한
    토큰을 발급한다.

    그 후, 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 전달한다.

서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 사용자가 요청한 작업에 권한이 있는지
확인하여 작업을 처리한다.

서버에서는 사용자에 대한 세션을 유지 할 필요가 없다.
즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고,

사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서 서버 자원과 비용을 절감할 수 있다.


Reference
JWT란 무엇인가
Oauth없이 JWT만 보내지 못하는 이유
JWT

profile
'Why' better than 'Yes'

0개의 댓글