본문 바로가기
스파르타 내배캠

[TIL] #24. JWT

by saemsaem 2024. 5. 24.


 

 [ JWT ] 

JWT (Json Web Token)

: JSON 포멧으로 저장하는 토큰의 종류. 쿠키 저장소를 이용한다.

구조
 • Header : Typ, alg로 구성된다.
     ◦Typ : 토큰 타입 지정
     ◦alg : 알고리즘 방식 지정. 서명 및 토큰 검증에 사용

 • Payload : 클레임(코튼에서 사용할 정보의 조각들)이 담겨있다. 
     ◦ 등록된 클레임
     ◦ 공개 클레임
     ◦ 비공개 클레임

 • Signature : 토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드

 

JWT가 필요한 경우

서버가 2대 이상일 때, 로드밸런서가 해당하지 않는 서버에 요청을 보낼 수 있다. 이를 해결하기 위해서는
 1. sticky session : clinet마다 서버를 고정한다.
 2. 세션 저장소 생성 : 모든 세션을 저장한다.
 3. JWT 사용 : 토큰이 들어왔을 때 검증한다. 단, 모든 서버가 동일하게 secret key를 가지고 있어야 한다.

 

JWT의 장단점

장점
 - 동시 접속자가 많을 때 서버 측 부하를 낮춤
 - client와 server가 다른 도메일을 사용할 때 유용함
단점 
 - 구현의 복잡도 증가
 - JWT가 커질수록 네트워크 비용 증가
 - 이미 생성된 JWT를 만료시킬 방법이 없음
 - secret key 유출 시 JWT 조회 및 조작이 가능함 (토큰에 중요 정보를 넣지 않아야 함)

 

JWT 사용 흐름

• 로그인 정보를 JWT로 암호화
• 서버에서 직접 쿠키 생성 → JWT를 담음 → client에 응답
서버에서 API를 요청할 때마다 쿠키가 포함되어 날라감 → 서버에서는 해당 쿠키를 request 객체에서 찾음 (JWT와 이름이 같은지 확인)
server는 client가 전달한 JWT가 유효한지 검증 → JWT에서 사용자 정보를 가져올 수 있음

 

JWT 시작하기

라이브러리 추가

// build.gradle
compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'
// application.properties
// secret key를 추가해두고 가져다 쓸 수 있음 (encoding)
jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7Yqc7YSw7LWc7JuQ67mI7J6F64uI64ukLg==

'스파르타 내배캠' 카테고리의 다른 글

[TIL] #26. entity 연결  (0) 2024.05.28
[TIL] #25. HTTP 응답 상태 반환  (0) 2024.05.28
[TIL] #23. 연관관계  (0) 2024.05.24
[TIL] #22. 4주차 강의  (0) 2024.05.22
[TIL] #21. spring 3주차 강의  (0) 2024.05.21