TIL ⭐

JWT

merrytang 2022. 12. 6. 22:18

 JWT(Json Web Token)란?

일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰이다. 웹 상에서 정보를 Json 형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 토큰으로 복잡하고 읽을 수 없는 string 형태로 저장되어있다.

 

JWT 의 장점

  • 토큰 자체에 사용자 인증에 필요한 모든 정보가 있기 때문에 별도의 인증 저장소가 필요없음.
  • 서버의 부담이 적음

 

JWT의 단점

  • 정보가 많아 질수록 토큰의 길이가 늘어남으로 네트워크에 부하를 줄 수가 있음(쿠키,세션과 다르게 base64 인코딩을 통해 정보전달을 하므로)
  • payload를 탈취하여 디코딩 하면 데이터를 볼 수 있음(payload에는 비민감정보만 기입)
  • 토큰이 탈취당하면 만료될 때까지 대처 불가하기 때문에 JWT 유효기간을 짧게 설정해야된다. 

 

JWT의 구성요소

헤더(Header)

어떠한 알고리즘으로 암호화 할 것이지, 어떠한 토큰을 사용할 것이지에 대한 정보가 들어있다.

 

정보(Payload)

전달하려는 정보가 들어있다. payload에 있는 내용은 수정이 가능하여 더 많은 정보를 추가할 수 있다. 그러나 노출과 수정이 가능한 지점이기 때문에 인증이 필요한 최소한의 정보만을 담아야한다.

 

서명(Signature)

가장 중요한 부분으로 헤더와 정보를 합친 후 발급해준 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만들어준다. 

 

 

JWT 동작원리

1. 클라이언트에서 ID, PW 정보를서버로 보냄.

2. 서버에서 ID, PW 정보를 이용하여 JWT Token을 생성함.

3. 서버에서 클라이언트로 JWT Token을 보냄.

4. 클라이언트에서 서버로 서비스 요청 시, JWT Token을 같이 보냄.

5. 서버에서 서비스 처리시, JWT Token을 검증, 일치하면 서비스를 동작시켜 클라이언트오 응답. 

 

 

참조

https://devscb.tistory.com/80

https://velog.io/@hahan/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://pulpul8282.tistory.com/m/240