Jwt 구조와 인증

  • jwt

posted on 25 Sep 2024 under category jwt

JWT 구조와 인증

🌊 JWT 구조 (feat. jwt.io)

💫 JWT 구조

jwt 공식사이트(jwt.io)
암호화된 토큰을 해석하기 위한 Debugger를 볼 수 있음!

헤더 : 토큰을 암호화 하는 데 사용한 알고리즘, 토큰의 형태(jwt)
페이로드 : 사용자 정보 (이름, 주소, 핸드폰, … 비밀번호 X)
서명 : 페이로드 값이 바뀌면, 서명값이 통째로 바뀌므로 JWT 믿고 사용가능


💫 복호화된 토큰의 뜻

HEADER:ALGORITHM & TOKEN TYPE(알고리즘과 토큰 형태를 알려줌)
JWT의 타입(typ)과 사용된 해싱 알고리즘(alg)에 대한 정보를 포함

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

PAYLOAD:DATA(정보를 담고 다님)
토큰에 포함될 실제 정보(클레임, Claim)를 담고 있습니다. 클레임은 보통 사용자 정보, 권한, 유효기간 등을 포함

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

VERIFY SIGNATURE(서명 : 토큰을 보증함)
앞서 인코딩된 헤더와 페이로드를 결합한 후, 지정된 알고리즘(예: HMAC SHA256)으로 비밀 키를 이용해 서명한 값
서명은 토큰이 위변조되지 않았음을 보장하는 역할

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


eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

암호화된 JWT 토큰의 모습!
색깔의 순서대로 헤더, 페이로드, 서명!

🌊 JWT 인증/인가 절차

💫 JWT 인증/인가 절차

  1. 로그인 요청 :
    클라이언트는 사용자 이름과 비밀번호 같은 자격 증명을 서버에 전송.

  2. 서버의 자격 증명 검증 :
    서버는 클라이언트가 보낸 자격 증명이 올바른지 확인. 이 과정에서 데이터베이스를 참조하여 사용자가 입력한 정보가 맞는지 검증.

  3. JWT 토큰 발급 :
    자격 증명이 유효한 경우, 서버는 JWT 토큰을 생성하여 클라이언트에게 반환. 이 토큰에는 사용자 정보와 인증 관련 데이터가 포함.

  4. 클라이언트의 JWT 저장 :
    클라이언트는 받은 JWT 토큰을 브라우저의 로컬 스토리지나 쿠키에 저장.

  5. 추후 요청 시 토큰 전송 :
    이후 클라이언트가 서버에 요청을 보낼 때, HTTP 요청 헤더의 Authorization 필드에 JWT 토큰을 포함시켜 전송.

  6. 서버의 JWT 검증 :
    서버는 클라이언트로부터 받은 JWT 토큰을 검증. 여기서는 서명이 유효한지, 토큰이 만료되지 않았는지 등을 확인

  7. 요청 처리 및 응답 :
    JWT 토큰이 유효하면, 서버는 요청을 정상 처리하고 클라이언트에게 응답을 보냄. 반면, 토큰이 유효하지 않거나 만료된 경우에는 인증 실패 응답을 보냄.