JSON Web Token

장동하·2022년 7월 17일
0

토막상식

목록 보기
1/3

WIL Date : 2022년 7월 둘째주

JWT란?

  • 기본 구조 : Client -> API Server -> Database
  • 회원 권한이 필요한 과정이면 C -> S -> D 로 가서 확인하는 과정을 계속 거쳐야함
  • 이러한 전통적인 구조를 깨는 방식이 JWT
    • DB에서 계속해서 권한을 확인하는 방식에서
    • Client와 Server에서만 인증이 완료될 수 있게 하는 토큰
  • JWT는 Client가 유저 데이터를 관리한다.
  • 단 Client는 JWT를 볼 수는 있지만 수정할 수가 없음 (서버에서만 수정 가능)

JWT의 구조

출처 - https://www.oreilly.com/library/view/learning-redux/9781786462398/3c0e09c6-b760-4ab8-b76e-d86b7f803df7.xhtml

  • { Header }.{ payload }.{ Signature }
  • jhbGci.tCXLKAj3or.fjasdfpje23 등으로 적혀있음
  • 따로 암호화를 한 것은 아니고 데이터 전송하기 편하게 base64 포맷으로 변환만 한 것 (인코딩하면 원본을 볼 수 있음)
    • base64 포맷한 데이터도 출처의 URL을 들어가보면 확인할 수 있다.
  • 저 중에 있는 Signature 덕분에 클라이언트가 수정이 불가능
  • Signature는 헤더와 페이로드의 정보를 SHA256으로 암호화를 진행
  • 그러면 서버는 시그니쳐를 복호화해서 정보만 확인하면 되는 것

JWT의 단점

  1. Token Expiration Issue
  • 토큰이 탈취당하면 손쓸 방법이 없음
  • 그래서 JWT에서는 만료 기한을 정해둠
  1. 토큰의 탈취
  • 만료기한을 정하면 토큰을 사용하지 못하게는 할 수 있음
  • 그러나 그 안에 중요한 개인정보가 있다면 해커는 해당 정보를 볼 수 있음

JWT는 그러면 언제 사용할까?

  • 인증 과정 전체를 JWT로 하는 곳은 거의 존재하지 않음
  • 따라서 세션 관리를 원래대로 하되, JWT는 쿠키 정도의 역할만을 진행

JWT 한계점의 해결방법

  1. Server-Side (서버에서 암호화를 관리)
  • 대칭키를 이용해 특정한 키를 알지 못하면 볼 수 없게 암호화를 하는 방법이 그 중 하나이다.
  • 서버에서는 토큰의 정보를 확인할 수 있지만 유저에서는 토큰 정보를 확인하지 못하게 설정한다.
  1. Client-Side (클라이언트에서 암호화를 관리)
  • 클라이언트에서 특정 키를 이용하여 암호화를 진행
    • 그러나 특정 키 역시 탈취당하면 평문을 탈취당할 가능성이 있을 듯함 (주관적인 생각)
  • 그러면 JWT를 탈취당해도 정보를 확인할 수 없음
  • 대신 서버에서 암호화를 관리하는 것보다 서버의 부하, 속도 측면에서 우수

! 정보출처 : https://www.youtube.com/c/TaehoonMoon

0개의 댓글