728x90
JWT
jwt란
서버가 1대인 경우 모든 클라이언트의 로그인 정보를 소유한다.
서버가 2대 이상인 경우 서버의 대용량 트래픽 처리를 위해 서버 2대 이상 운영이 필요하다.
서버마다 다른 클라이언트 로그인 정보를 가지고 있을 수 있다.
- 서버1 : 클라이언트1, 클라이언트2, 클라이언트3
- 서버2 : 클라이언트4
- 서버3 : 클라이언트5, 클라이언트6
- 클라이언트1 로그인 정보를 가지고 있지 않은 서버2나 서버3에 API요청을 하게되면 클라이언트마다 요청 서버를 고정하면 된다.
JWT 사용
- 로그인 정보를 서버에 저장하지 않고 클라이언트에 로그인 정보를 JWT로 암호화 하여 저장한다.
- 모든 서버에서 동일한 Secret Key를 보유
- Secret Key를 통한 암호화 / 위조 검정
JWT 장/단점
장점
- 동시 접속자가 많을 시 서버 측 부하 낮춤
- 클라이언트, 서버가 다른 도메인을 사용할때
단점
- 구현의 복잡도 증가
- JWT에 담는 내용이 커질 수록 네트워크 비용 증가
- 기생성된 JWT를 일부만 만료시킬 방법 없음
- Secret key 유출 시 JWT조작 가능
JWT 사용 흐름
JWT 사용 흐름 Overview
Client 가 username, password 로 로그인 성공 시
"로그인 정보" → JWT 로 암호화 (Secret Key 사용)
JWT 를 Client 응답에 전달
Client 에서 JWT 저장 (쿠키, Local storage 등)
Client 에서 JWT 통해 인증방법
JWT 를 API 요청 시마다 Header 에 포함
예) HTTP Headers
Content-Type: application/json **Authorization: Bearer** **<JWT> ...**
Server
Client 가 전달한 JWT 위조 여부 검증 (Secret Key 사용)
JWT 유효기간이 지나지 않았는지 검증
검증 성공시,
JWT → "로그인 정보" (UserDetailsImpl) 만들어 사용
ex) GET /api/products : JWT 보낸 사용자의 관심상품 목록 조회
'Spring' 카테고리의 다른 글
[TIL] 항해99 Day 38 (0) | 2024.04.15 |
---|---|
JWT 방식의 정보 인증(2) (1) | 2024.04.12 |
[TIL] CORS에러! 무엇인가? (1) | 2024.04.12 |
MVC 테스트 (1) | 2024.04.12 |
RESTful하다? (0) | 2024.04.12 |