만약 애니동아리에서 웹사이트를 만들어서 로그인 한 사람한테만 애니를 볼 수 있게 한다. 로그인을 하면 입장권을 발급하고 입장권을 확인하면 된다.그럼 방식은 1. JWT 2. Session 방식이 있다.
먼저 Session부터 알아보자
Session은 입장권 발급번호를 DB(Session Store)나 메모리에 저장한 후 요청이 들어올 때마다 입장권을 발급번호와 DB에 있는 번호와 같은지 확인한 후 응답을 한다.
JWT는 입장권에 회원명, 이메일, 발급일, 유효기간 등 많은 정보들이 써져있다. 그리고 서버는 입장권에 별 문제가 없다면 그냥 통과 시킨다.
JWT는 stateless -> 유저가 많아져도 처리가 빠름.
Session stateful -> 유저가 많아지면 처리가 느려짐.
일단 JWT는 헤더, 페이로드, 인증된 서명.
페이로드에 입장권에 적힐 정보를 넣고 base64 혹은 다른 걸로 인코딩
JWT의 허점
헤더에 있는 알고리즘을 none으로 하면 안됨. HS256을 사용
JWT는 디코딩이 쉬움 (변환이 쉬움) -> 최소한의 정보만 넣는 것이 좋음.
시크릿 키는 대충 적으면 안됨. -> 그럼 bruteforce attack에 당함
1. 길게
2. 공유금지
3. 생성용키/검증용키로 따로 함.
JWT탈취.
-> JWT특성 상, 회수하거나, 금지하는 건 못함.
--> 1. 훔치기 어렵게, 2. JWT 블랙리스트, 3. 유효기간 짧게, refresh token 가용 -> refresh token rotation(1회용으로)
별 일 업스염ㄴ session방식으로 사람이 많아진다면? -> jwt + 보안장치