기존의 MVC 프로젝트를 Spring boot와 NEXT.JS로 개발을 해보니까 쿠키는 도메인에 제약되서 많은 불편함을 느꼈다.
이래서 JWT의 필요성을 느꼈고 JWT가 뭔지 알아보자.
JWT란?
웹 어플리케이션에서 사용자 인증과 정보 교환을 위한 개방형 표준
JWT의 구조
세 부분으로 구성되며, 각 부분은 점(.)으로 구분
헤더(Header) : 토큰 유형과 사용된 해시 알고리즘 정보
페이로드(Payload) : 클레이(calaim)이라 불리는 사용자 정보와 토큰 관련 정보를 포함
3. 서명(Signature): 토큰의 무결성을 검증하깅 암호화된 문자열
JWT의 작동원리
1. 사용자가 로그인하면 JWT 토큰생성하여 클라이언트 반환
2. 클라이언트는 받은 JWT를 저장하고 , 이후 요청시 uthorization 헤더에 포함시켜 서버로 전송
3. 서버는 JWT의 서명을 검증하여 토큰의 유효성을 확인
4. 검증이 성공하면 요청을 처리하고 응답을 보냄
JWT의 장점
1. 상태 비저장(Stateless) 서버가 사용자의 상태를 저장할 필요가 없어 확장성이 높음
2. 효율성 인증 정보가 토큰자체에 포함되어있어 별도의 DB조회가 필요없음.
3. 서명을 통한 데이터 무결성 보장
4. 멀티플랫폼 사용가능
JWT 단점
1. 토큰 크기 : 포함된 정보가 많을 수록 토큰 크기가 커져 네트워크 부하증가
2. 토큰폐기 어려움 : 이미 발급된 토큰 만료 전 까지 폐기 어려움
SPRING BOOT와 .NET8로 JWT 구현을 해보자