JWT
- JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
- 로그인 정보를 Server 에 저장하지 않고, Client 에 로그인 정보를 JWT 로 암호화하여 저장 → JWT 통해 인증/인가
- 모든 서버에서 동일한 Secret Key 소유
- Secret Key 통한 암호화 / 위조 검증 (복호화 시)
- JWT 장/단점
- 장점
- 동시 접속자가 많을 때 서버 측 부하 낮춤
- Client, Sever 가 다른 도메인을 사용할 때
- 예) 카카오 OAuth2 로그인 시 JWT Token 사용
- 단점
- 구현의 복잡도 증가
- JWT 에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버)
- 기 생성된 JWT 를 일부만 만료시킬 방법이 없음
- Secret key 유출 시 JWT 조작 가능
- 장점
- JWT 사용 흐름
- Client 가 username, password 로 로그인 성공 시
- 서버에서 "로그인 정보" → JWT 로 암호화 (Secret Key 사용)
- 서버에서 직접 쿠키를 생성해 JWT를 담아 Client 응답에 전달
- JWT 전달방법은 개발자가 정함
- 브라우저 쿠키 저장소에 자동으로 JWT 저장됨
- Client 에서 JWT 통해 인증방법
- 서버에서 API 요청 시마다 쿠키에 포함된 JWT를 찾아서 사용
- 쿠키에 담긴 정보가 여러 개일 수 있기 때문에 그 중 이름이 JWT가 담긴 쿠키의 이름과 동일한지 확인하여 JWT를 가져온다
- Server
-
- Client 가 전달한 JWT 위조 여부 검증 (Secret Key 사용)
- JWT 유효기간이 지나지 않았는지 검증
- 검증 성공시,
- JWT → 에서 사용자 정보를 가져와 확인
- ex) GET /api/products : JWT 보낸 사용자의 관심상품 목록 조회
-
- 서버에서 API 요청 시마다 쿠키에 포함된 JWT를 찾아서 사용
- Client 가 username, password 로 로그인 성공 시
- JWT 구조 보는 법 : https://jwt.io/
'Spring' 카테고리의 다른 글
Spring 개념 정리 ) SpringBoot의 JPA (0) | 2024.08.29 |
---|---|
Spring 기본적인 프로젝트 메뉴얼 (0) | 2024.08.27 |
Spring 개념 정리 ) 쿠키와 세션 (0) | 2024.08.23 |
Spring 개념 정리 ) 인증과 인가 / 쿠키와 세션, JWT (0) | 2024.08.22 |
Spring 개념 정리 ) Bean (0) | 2024.08.21 |