일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- WebConfigurerAdapter
- 스프링 #스프링 시큐리티 #spring security
- ㅂ
- securityconfig
- HttpSecurity
- ㅇㅇㅇㄴㅇ
- WebSecurity
- Session1이 그 모든 클라이언트의 저올
- 스프링시큐리티
- Spring Security
Archives
- Today
- Total
다오의 개발일지
JWT란 무엇일까? 본문
JWT(Json Web Token)란 JSON포멧을 이용하여 사용자 대한 속성을 저장하는 Claim 기반의 Web Token이다 즉 토큰의 한 종류이다. 일반적으로 쿠키 저장소를 사용하여 JWT를 저장한다.
왜 JWT를 사용할까?
서버가 1대있다고 가정을 해보자.
다수의 클라이언트가 서버에 요청을 한다고 했을 때 세션1이 그 모든 클라이언트의 정보를 소유하고 있다 서버가 1대인 경우 어떤 클라이언트간에 세션1이 구분을 할 수있다.
하지만 서버가 2대 이상인 경우
서버의 대용량 트래픽 처리를 위해 서버2대 이상이 필요할 수 있다.
이럴경우 로드 밸런서로 인해 세션마다 다른 로그인 정보를 가질 수 있게 된다.
- 로드 밸런서 : 클라이언트와 서버 중간에서 클라이언트들의 요청을 밸런스 있게 나눠주는 중간 관리자 역할을 한다.
해결방법
- Sticky Session: Client 마다 요청 Server 고정한다.
- 세션 저장소를 생성하여 모든 세션을 저장한다.
3. JWT 사용
- 로그인 정보를 Server에 저장하지 않고, Client에 로그인 정보를 JWT러 암호화하여 저장 -> JWT 통해 인증/인가
- 모든 서버에서 동일한 Secret Key를 소유한다.
- Secret Key 통한 암호화 / 위조 검증 (복호화 시)
JWT 장/단점
- 장점
- 동시 접속자가 많을 때 서버 측 부하 낮춤
- Client, Server가 다른 도메인을 사용할 때
- 예) 카카오 OAuth2 로그인 시 JWT Token 사용
- 단점
- 구현의 복잡도 증가
- JWT에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 -> 서버)
- 기 생성된 JWT를 일부만 만료시킬 방법이 없음
- Secret Key 유출 시 JWT 조작가능
JWT 사용 흐름
- 클라이언트가 username, password로 로그인 성공 시
- 서버에서 '로그인정보' -> JWT로 암호화(Secret Key 아용)
- 서버에서 직접 쿠키를 생성해 JWT를 담아 클라이언트 응답에 전달
- JWT 전달방법은 개발자가 정함
- 응답 Header에 아래 형태로 JWT 전달
- JWT 전달방법은 개발자가 정함
- 브라우저 쿠키 저장소에 자동으로 JWT 저장됨
- 클라이언트에서 JWT통해 인증 하는 방법
- 서버에서 API요청 시마다 쿠키에 포함된 JWT를 찾아서 사용
- 쿠키를 찾는 코드
- 서버에서 API요청 시마다 쿠키에 포함된 JWT를 찾아서 사용
- 쿠키에 담긴 정보가 여러 개일 수 있기 떄문에 그 중 이름이 JWT가 담긴 쿠키에 이름과 동일한 지 확인하여 JWT를 가져옵니다.
Server
- Client가 전달한 JWT 위조 여부 검증 (Secret Key사용)
- JWT 유효기간이 지나지 았는지 검증
- 검증 성공시,
- JWT -> 에서 사용자 정보를 가져와 확인 ex) GET /api/products : JWT 보낸 사용자의 관심상품 목록 조회
JWT 구조
- JWT는 누구나 평분으로 복호 가능하다.
- 하지만 Secret Key가 없으면 JWT는 수정불가하다
- 결국 JWT는 Read only 데이터이다
JWT의 흐름에 대한 Chat GPT 답변
'CS' 카테고리의 다른 글
CPU와 메모리 - 2 (0) | 2023.08.21 |
---|---|
CPU와 메모리 - 1 (0) | 2023.08.18 |
쿠키와 세션이 무엇일까? (0) | 2023.06.19 |
서버란 무엇일까? 웹 서버, WAS (0) | 2023.06.16 |
웹 클라이언트와 서버의 요청과 응답, REST API (0) | 2023.06.13 |