카테고리 없음

23.10.08 JWT

스스로에게 2023. 10. 13. 19:52

JWT는 JSON Web Token의 약자로, 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격이다.

  1. Header (헤더): 토큰의 타입과 사용 중인 알고리즘(예: HMAC SHA256 또는 RSA)에 대한 정보를 포함한다.
  2. Payload (페이로드): 유용한 데이터나 *클레임을 포함한다. 일반적으로 사용자 정보나 다른 인증에 필요한 데이터가 들어간다.
  3. Signature (서명): 헤더와 페이로드, 그리고 '시크릿'을 사용해 생성된 서명입니다. 이 서명을 통해 정보가 변조되지 않았는지 검증할 수 있습니다.

*클레임(Claim): JWT(JSON Web Token)의 페이로드(Payload) 섹션에 포함된 정보 단위를 의미한다.

 

JWT의 동작 방식:

  1. 사용자가 로그인을 시도를 한다.
  2. 서버는 사용자의 자격 증명을 확인한 후 JWT를 생성하여 사용자에게 반환한다.
  3. 사용자는 이 후의 요청에서 JWT를 보통 HTTP 헤더에 포함하여 서버로 전송한다. 
  4. 서버는 JWT의 서명을 검증하여 요청이 유효한지 확인하고, 검증이 성공하면 요청에 대한 응답을 보낸다.

 

장점:

  • 분산 웹 시스템에서 확장성이 뛰어나다. 서버는 토큰만 검증하면 되므로 중앙 집중식 세션 관리가 필요 없다.
  • 클레임 기반으로 정보를 포함하기 때문에 유연성이 좋다.

 

단점:

  • 페이로드의 내용이 Base64Url 인코딩만 되어 있기 때문에 중요한 정보는 추가 암호화 없이 노출될 수 있다.
  • 토큰이 탈취되면 중요 정보가 노출될 위험이 있다.
  • 토큰의 만료 시간을 짧게 설정하지 않으면, 한 번 탈취당하면 오랜 시간 동안 유효할 수 있다.