JWT의 구조는 다음과 같다.
<Header>.<Payload>.<Signature>
JWT의 인증과정은 다음과 같다.
간단한 흐름을 정리하자면 이렇다.
클라이어트가 로그인 요청 → 로그인 성공 → Secret Key를 사용해 Signature 생성 → Base64로 Encoding → Cookie에 담아 JWT 발급 → 클라이언트에서 JWT를 저장해 서버에 요청 → 서버의 JWT 유효성 검사 통과 → 인증 성공, 요청 처리
클라이언트에서 Authorization Header에 JWT를 담아 서버에 요청을 보낼 때, 서버는 Signature를 사용해 유효성 검사를 한다. 즉, Header, Payload를 서버의 Secret Key값을 이용해 Signature를 다시 만들어 비교하기 때문에 임의로 조작된 데이터를 판별할 수 있다.
JSON Web Token의 목적은 정보 보호가 아닌, 위조 방지에 있다!
✔️ JWT 장점
1. Signature로 서버의 보안성이 증가한다.
2. Token 자체가 필요한 정보(유저 및 검증 정보)들을 모두 가지고 있다.
3. 서버는 인증 정보와 관련된 별도의 저장소를 사용하지 않는다.
4. 서버의 수평 확장성(Scale Out)이 높아진다.
5. Cookie가 없는 다른 환경에서도 인증/인가를 적용할 수 있다.
6. DB를 조회하지 않아도 된다.
✔️ JWT 단점
1. Payload는 암호화 된 것이 아니라 민감한 정보를 다루지 못한다.
2. Token의 길이가 길어서 트래픽이 증가하면 네트워크에 부하가 증가한다.
3. 클라이언트 측에서 Token을 관리하기 때문에 탈취당하면 대처하기 어렵다.
오늘은 일정때문에 저녁에 공부를 시작했다. 이번주는 공부 시간을 확보하기가 쉽지 않으니 더 집중해봐야겠다.