어제는 토큰 세션 방식에 대하여 알아보았다.
오늘은 인증 인가 방식중 JWT 기반 인증에 대해 알아보겠다.
JWT 인증 방식을 알아보기전에 JWT란 무엇일까?
JWT란?
인증에 필요한 정보들을 암호화시킨 토큰을 의미한다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.
JWT 기반 인증
- 사용자가 로그인 요청을 보낸다.
- 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해본다.
- 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화 해서 내보낸다.
- 서버는 로그인 요청의 응답으로 jwt 토큰을 내어준다.
- 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보낸다.
- 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증한다.
- 이후에는 로그인 된 유저에 따른 응답을 내어준다.
세션 저장소 생성 과 JWT 사용
세션 저장소 사용
Session storage 가 모든 Client 의 로그인 정보 소유하고 있기 때문에 모든 서버에서 모든 Client의 API 요청을 처리할 수 있다.
JWT 사용
로그인 정보를 Server 에 저장하지 않고, Client 에 로그인 정보를 JWT 로 암호화하여 저장 → JWT 통해 인증/인가
모든 서버에서 동일한 Secret Key 소유합니다
Secret Key 통한 암호화 / 위조 검증 (복호화 시)
JWT 장/단점
장점
동시 접속자가 많을 때 서버 측 부하 낮춤
Client, Server 가 다른 도메인을 사용할때
예) 카카오 OAuth2 로그인 시 JWT Token 사용
단점
구현의 복잡도 증가
WT 에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버)
기 생성된 JWT 를 일부만 만료시킬 방법이 없음
Secret key 유출 시 JWT 조작 가능
JWT 구조
JWT 는 누구나 평문으로 복호화 가능
하지만 Secret Key 가 없으면 JWT 수정 불가능
결국 JWT 는 Read only 데이터이다.
Payload에 실제 유저의 정보가 들어있고,
HEADER와 VERIFY SIGNATURE부분은 암호화 관련된 정보 양식이라고 생각하시면 된다.
'내일배움캠프' 카테고리의 다른 글
내일배움캠프TIL - ResponseEntity (0) | 2024.02.06 |
---|---|
내일배움캠프TIL- 영속성 전이 (0) | 2024.01.30 |
내일배움캠프 TIL - 쿠키와 세션 (0) | 2024.01.24 |
내일배움캠프 TIL - Spring Bean (1) | 2024.01.23 |
내일배움캠프 TIL - DTO를 클래스에서 record로 (0) | 2024.01.23 |