본문 바로가기
카테고리 없음

[CS] JWT는 전체를 sha256 알고리즘으로 암호화 되는 것이 아닙니다.

by 마라민초닭발로제 2025. 1. 15.

결론부터 말하면, 우리가 생각하는 토큰에 signature 부분만 암호화 되는거임. Header랑 payload부분은 base64 인코딩임

 

 

 

JWT(JSON Web Token)는 기본적으로 3개의 파트로 구성되어 있습니다: 헤더(header), 페이로드(payload), 그리고 서명(signature). SHA-256은 JWT의 서명을 생성하는 데 사용되며, 이는 단방향 해시 알고리즘으로 암호화된 값입니다. 아래에서 서버가 토큰 만료 여부를 확인하는 원리를 단계별로 설명하겠습니다.

JWT의 구성

  1. 헤더(Header): 토큰의 타입과 해싱 알고리즘 정보를 포함합니다.
  2. { "alg": "HS256", "typ": "JWT" }
  3. 페이로드(Payload): 토큰에 포함된 클레임(정보)입니다. 여기에는 토큰 만료 시간(exp), 발급 시간(iat), 사용자 정보 등이 들어갑니다.
{
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022,
    "exp": 1516242622
}
  1. 서명(Signature): 헤더와 페이로드를 조합해 서버의 비밀 키를 이용해 생성된 값입니다. HS256 알고리즘의 경우 다음과 같이 생성됩니다
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

 

 

 

 

 

서버가 JWT를 검증하고 만료를 확인하는 과정

  1. 토큰 디코딩 및 분리
  • 클라이언트로부터 받은 JWT는 .으로 구분된 세 파트로 이루어져 있습니다: header.payload.signature.
  • 서버는 헤더와 페이로드 부분을 Base64 디코딩하여 읽습니다.
    • 디코딩된 페이로드에서 만료 시간(exp)을 확인할 수 있습니다.
  1. 서명 검증
  • 서버는 토큰의 헤더와 페이로드를 재조합하여 서명을 생성합니다. 이때 서버는 클라이언트와 공유되지 않은 비밀 키(secret)를 사용합니다.
  • 생성된 서명과 클라이언트가 제공한 서명을 비교하여 변조 여부를 확인합니다.
  1. 만료 시간 확인
  • 현재시간과 비교하여 토큰이 만료되었는지 확인합니다.