JWT 개념

JIHUN_K·2023년 10월 13일
0
post-thumbnail

JWT 토큰

JWT(JSON Web Token)은 웹 표준(RFC 7519)으로, 데이터를 안전하게 전송하기 위해 사용되는 액세스 토큰이다. 이는 서명된 JSON 객체로 표현되며, 암호화되지 않은 형태로 전달된다. JWT는 세 부분으로 구성된다.

JWT 토큰의 3가지 개념

헤더

헤더의 목적은 다음과 같다. 암호화 알고리즘 지정과, 토큰 유형을 나타낸다.
예를들면 alg에 HMAC, SHA256 또는 RSA와 같은 암호화 알고리즘을 포함할 수 있으며
typ는 Bearer 토큰인지, JWT 토큰인지 등을 식별하는데 나타낸다.

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

페이로드

사용자 정보를 포함하는 데이터이다. 페이로드에 사용자 정보를 저장함으로써 토큰으로 사용자를 식별할 수 있다.

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

시그니쳐(서명)

시그니처 즉 서명은 토큰의 무결성과 인증을 보장하는 데이터다.
JWT의 시그니처는 헤더와 페이로드를 Base64로 인코딩한 후, 서버에서 미리 정의된 시크릿 키를 사용하여 해싱하는 과정을 통해 만들어진다. 클라이언트가 토큰을 서버로 전송하면, 서버는 헤더와 페이로드를 다시 해싱하여 새로운 시그니처를 생성한다. 이후에 생성된 시그니처와 클라이언트로부터 받은 시그니처를 비교하여 토큰이 변조되었는지 여부를 확인함으로써 무결성을 입증한다.

{
  HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  your-256-bit-secret
}

JWT 토큰으로 로그인이 이루어지는 과정

  1. 토큰 검사: 사용자가 로그인 데이터를 서버로 전송 후 서버는 인증 정보를 확인한다.

  2. 토큰 생성: 인증이 성공적으로 이루어지면, 서버는 JWT 토큰을 생성. 이 토큰은 헤더, 사용자 정보가 담긴 페이로드, 그리고 시그니처 세 부분으로 구성된다.

  3. 토큰 전송: 서버는 JWT 토큰을 클라이언트로 다시 보내며, 일반적으로 토큰은 쿠키나 브라우저 저장소 혹은 메모리에 저장한다

  4. 후속 진입: 로그인 이후 클라이언트의 로그인 상태를 유지하기 위해 매 페이지 접속 시 토큰 여부를 검사하고 서버에 전송 해 유효성 검사 후 브라우저의 로그인 유지를 결정한다.

profile
한발 한발 내딛자

0개의 댓글